文档

Java™ 教程
隐藏目录
边界匹配器
目录:基本的Java类
课程:正则表达式

边界匹配器

到目前为止,我们只关心在特定输入字符串中是否找到了匹配项的位置。我们从不关心匹配项在字符串中的位置。

您可以通过使用边界匹配器来使模式匹配更精确。例如,也许您只对找到的特定单词感兴趣,但只有在它出现在行的开头或结尾时才匹配。或者您想知道匹配项是在单词边界上进行的,还是在上一个匹配项的末尾。

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

边界构造 描述
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配项的结尾
\Z 输入的结尾,但不包括最后的终止符
\z 输入的结尾

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

 
输入您的正则表达式:^dog$
输入要搜索的字符串:dog
我发现了文本“dog”,起始索引为0,结束索引为3。

输入您的正则表达式:^dog$
输入要搜索的字符串:       dog
没有找到匹配项。

输入您的正则表达式:\s*dog$
输入要搜索的字符串:             dog
我发现了文本“            dog”,起始索引为0,结束索引为15。

输入您的正则表达式:^dog\w*
输入要搜索的字符串: dogblahblah
我发现了文本“dogblahblah”,起始索引为0,结束索引为11。

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

要检查模式是否在单词边界上开始和结束(而不是在较长字符串的子字符串上),只需在两侧使用\b;例如:\bdog\b

 

输入正则表达式:\bdog\b
输入要搜索的字符串:The dog plays in the yard.
我在索引4处找到了文本“dog”,并在索引7处结束。

输入正则表达式:\bdog\b
输入要搜索的字符串:The doggie plays in the yard.
未找到匹配项。

要在非单词边界上匹配表达式,请使用\B

 
输入正则表达式:\bdog\B
输入要搜索的字符串:The dog plays in the yard.
未找到匹配项。

输入正则表达式:\bdog\B
输入要搜索的字符串:The doggie plays in the yard.
我在索引4处找到了文本“dog”,并在索引7处结束。

要求匹配仅出现在前一个匹配的末尾,请使用\G

 
输入正则表达式:dog 
输入要搜索的字符串:dog dog
我在索引0处找到了文本“dog”,并在索引3处结束。
我在索引4处找到了文本“dog”,并在索引7处结束。

输入正则表达式:\Gdog 
输入要搜索的字符串:dog dog
我在索引0处找到了文本“dog”,并在索引3处结束。

在第二个示例中,只找到了一个匹配项,因为第二个“dog”的出现不是在前一个匹配项的末尾开始。


上一页: 捕获组
下一页: Pattern类的方法