# PatternSyntaxException 类的方法
PatternSyntaxException 是未经检查的异常,指示正则表达式模式中的语法错误。PatternSyntaxException 类提供了以下方法来帮助你确定是什么出了问题:
public String getDescription()
:检索错误的描述。public int getIndex()
:检索错误索引。public String getPattern()
:检索错误的正则表达式模式。public String getMessage()
:返回一个多行字符串,其中包含语法错误及其索引的描述,错误的正则表达式模式以及模式中错误索引的可视指示。
检查异常,更新之前的测试工具类,这里就更新之前一直使用的函数就行了
public static void regexTest(String regex, String input) {
System.out.println("=== " + regex);
Pattern pattern = null;
Matcher matcher = null;
try {
pattern = Pattern.compile(regex);
matcher = pattern.matcher(input);
} catch (PatternSyntaxException pse) {
System.out.format("有一个问题,正则表达式: %n");
System.out.format("模式是: %s%n",
pse.getPattern());
System.out.format("描述是: %s%n",
pse.getDescription());
System.out.format("消息是: %s%n",
pse.getMessage());
System.out.format("索引为: %s%n",
pse.getIndex());
System.exit(0);
}
boolean found = false;
while (matcher.find()) {
// 索引 包含头 不包含尾
System.out.format("我发现文本中的" +
" \"%s\" " +
"在开始索引 %d 和 结束索引 %d.%n",
matcher.group(),
matcher.start(),
matcher.end());
found = true;
}
if (!found) {
System.out.format("No match found.%n");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
下面来测试下:
---- Test code ----
regexTest("?i)foo", "FOOfooFoOfoO");
---- Output ----
=== ?i)foo
有一个问题,正则表达式:
模式是: ?i)foo
描述是: Dangling meta character '?'
消息是: Dangling meta character '?' near index 0
?i)foo
^
索引为: 0
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
从这个输出,我们可以看到,语法错误是索引 0 上的悬挂元字符(问号)。缺少的开头圆括号是罪魁祸首。