在Java中使用\ b Boundary Matcher
我正在阅读Oracle文档中的Boundary Matcher 。 我理解大部分内容,但我无法掌握\b
边界匹配器。 以下是文档中的示例。
要检查模式是否在单词边界上开始和结束(与较长字符串中的子字符串相对),只需在任一侧使用\ b; 例如,\ bdog \ b
输入你的正则表达式:\ bdog \ b输入要搜索的输入字符串:狗在院子里玩。 我发现文本“dog”从索引4开始,到索引7结束。
输入你的正则表达式:\ bdog \ b输入要搜索的输入字符串:小狗在院子里玩。 找不到匹配项。 要匹配非单词边界上的表达式,请使用\ B代替:
输入你的正则表达式:\ bdog \ B输入要搜索的输入字符串:狗在院子里玩。 找不到匹配项。
输入你的正则表达式:\ bdog \ B输入要搜索的输入字符串:小狗在院子里玩。 我发现文本“dog”从索引4开始,到索引7结束。
总之,我无法理解\ b的工作。 有人可以帮助我描述它的用法,并帮助我理解这个例子。
谢谢
\b
是你可以称之为“锚”的东西:它将匹配输入文本中的位置。
更具体地说, \b
将匹配输入文本中的每个位置,其中:
- 没有前面的字符,后面的字符是单词字符(任何字母或数字,或下划线);
- 没有跟随字符,前面的字符是单词字符;
- 前面的字符是单词字符,后面的字符不是; 要么
- 以下字符是单词字符,前面的字符不是。
例如,文本"my dog eats"
的正则表达式dog\b
将匹配紧跟在g
dog
(这是一个单词字符)之后和下一个空格(不是)之前的位置。
请注意,与所有锚点一样,它与位置匹配的事实意味着它不会消耗任何输入文本。
其他锚点是^
, $
,lookarounds。
文档似乎没有解释究竟是什么词边界 。 让我尝试:
\b
匹配字符之间的位置(因此它与任何文本本身都不匹配,它只是断言在字符串中的当前位置满足某个条件)。 该条件定义为:
在当前位置之前 或当前位置之后 ,由\w
(字母数字和下划线)定义的字符集的字符或者 两者都不是 。
对于\B
,反之亦然。它匹配iff \b
在当前位置不匹配。
\ b – 匹配单词开头或结尾的空字符串。
The metacharacter \b is an anchor like the caret and the dollar sign. It matches at a position that is called a "word boundary". This match is zero-length.
\ B与\ b相反
\B matches the empty string not at the beginning or end of a word.
对于\b
,如果\b
一侧有’word’字符,则另一侧必须有一个not-‘word’字符。
对于\B
,如果一侧有’word’字符,则另一侧也必须有’word’字符。 如果一边有一个非”字’字符,那么另一边也必须有一个非’字’字符。
‘word’字符是A-Za-z0-9
和_
,其他A-Za-z0-9
不是C语言环境的字char。
简单地说, \b
匹配\w
和\W
(在非\w
)字符之间的位置,因此是Word的结束或开始。 String的结束/开始计为\W
你可能会发现最常见的\W
字符是:
- 空白
- 逗号
- 句号
- 特殊字符(§,$,%,[…])
- 不是下划线
- 任何不是ASCII(变音符号,西里尔语,阿拉伯语,[…])
\B
只是\b
的反向匹配
– >匹配位置, \b
不匹配(例如[\ w] [\ w]或[\ W] [\ W])
你可以在这里试验java正则表达式