文档

Java™ 教程-Java Tutorials 中文版
边界匹配
Trail: Essential Classes
Lesson: Regular Expressions

边界匹配

到目前为止,我们只关注于在特定输入字符串中是否 在某个位置 找到匹配。我们从不关心匹配发生在字符串中的 何处

通过使用 boundary matchers (边界匹配) 指定此类信息,可以使模式匹配更精确。例如,你可能对查找特定单词感兴趣,但前提是它出现在行的开头或结尾。或者你可能想知道匹配是在单词边界上进行,还是在上一个匹配的末尾进行。

下表列出并解释了所有边界匹配器。

边界构造 描述
^ 行首
$ 行尾
\b 单词边界
\B 非单词边界
\A 输入的开始
\G 上一个匹配的结束
\Z 输入结束但是对于最终终止符(如果有的话)
\z 输入结束

以下示例演示边界匹配器 ^$ 的使用。如上所述,^ 匹配一行的开头,$ 匹配一行的结尾。

 
Enter your regex: ^dog$
Enter input string to search: dog
I found the text "dog" starting at index 0 and ending at index 3.

Enter your regex: ^dog$
Enter input string to search:       dog
No match found.

Enter your regex: \s*dog$
Enter input string to search:             dog
I found the text "            dog" starting at index 0 and ending at index 15.

Enter your regex: ^dog\w*
Enter input string to search: dogblahblah
I found the text "dogblahblah" starting at index 0 and ending at index 11.

第一个示例是成功的,因为模式占用整个输入字符串。第二个示例失败,因为输入字符串在开头包含额外的空格。第三个示例指定一个表达式,该表达式允许无限制的空格,后面是行尾的“dog”。第四个例子要求“dog”出现在一行的开头,后跟无限数量的单词字符。

要检查模式是否在单词边界上开始和结束(与较长字符串中的子字符串相对),只需在任一侧使用 \b;例如,\bdog\b

 

Enter your regex: \bdog\b
Enter input string to search: The dog plays in the yard.
I found the text "dog" starting at index 4 and ending at index 7.

Enter your regex: \bdog\b
Enter input string to search: The doggie plays in the yard.
No match found.

要匹配非字边界上的表达式,请改为使用 \B

 
Enter your regex: \bdog\B
Enter input string to search: The dog plays in the yard.
No match found.

Enter your regex: \bdog\B
Enter input string to search: The doggie plays in the yard.
I found the text "dog" starting at index 4 and ending at index 7.

要求匹配仅在上一个匹配结束时发生,请使用 \G

 
Enter your regex: dog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.
I found the text "dog" starting at index 4 and ending at index 7.

Enter your regex: \Gdog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.

这里第二个例子只找到一个匹配,因为第二次匹配项的“dog”没有在上一个匹配结束时开始。


Previous page: Capturing Groups
Next page: Methods of the Pattern Class