Класс PatternSyntaxException
Класс PatternSyntaxException наследуется от класса IllegalArgumentException
и представляет собой непроверяемое исключение, которое выбрасывается
при обнаружении синтаксической ошибки в шаблоне регулярного выражения.
Это исключение возникает в момент компиляции шаблона, например при вызове
метода compile класса Pattern или при использовании
строковых методов, принимающих регулярное выражение.
В первом параметре конструктора передается описание ошибки,
во второй параметр - ошибочный шаблон регулярного выражения,
в третий - индекс позиции, в которой была обнаружена ошибка.
Синтаксис
public class PatternSyntaxException extends IllegalArgumentException
Основные методы класса:
public String getDescription()
public String getPattern()
public int getIndex()
public String getMessage()
Пример
Давайте попробуем скомпилировать шаблон с незакрытой квадратной скобкой и перехватим возникшее исключение:
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class Main
{
public static void main(String[] args)
{
try
{
Pattern.compile("[abc");
}
catch (PatternSyntaxException e)
{
System.out.println("Description: " + e.getDescription());
System.out.println("Pattern: " + e.getPattern());
System.out.println("Index: " + e.getIndex());
}
}
}
Результат выполнения кода:
"Description: Unclosed character class"
"Pattern: [abc"
"Index: 0"
Пример
Давайте рассмотрим исключение, возникающее при использовании некорректного квантификатора в шаблоне:
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class Main
{
public static void main(String[] args)
{
try
{
Pattern.compile("abc**");
}
catch (PatternSyntaxException e)
{
System.out.println("Description: " + e.getDescription());
System.out.println("Index: " + e.getIndex());
System.out.println("Message: " + e.getMessage());
}
}
}
Результат выполнения кода:
"Description: Dangling meta character '*'"
"Index: 4"
"Message: Dangling meta character '*' near index 4"
Пример
Давайте обработаем исключение при разбиении строки
с помощью метода split класса String:
import java.util.regex.PatternSyntaxException;
public class Main
{
public static void main(String[] args)
{
String str = "abcde";
try
{
String[] res = str.split("[");
System.out.println(res.length);
}
catch (PatternSyntaxException e)
{
System.out.println("Error: " + e.getDescription());
}
}
}
Результат выполнения кода:
"Error: Unclosed character class"