在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正则表达式