在Java中使用\ b边界匹配器

时间:2014-02-11 07:28:20

标签: java regex

我正在阅读Oracle文档中的Boundary Matcher。我理解大部分内容,但我无法掌握\b边界匹配器。以下是文档中的示例。

  

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

     

输入你的正则表达式:\ bdog \ b输入要搜索的输入字符串:狗玩   在院子里。我找到了文字" dog"从索引4开始到结束于   指数7。

     

输入您的正则表达式:\ bdog \ b输入要搜索的输入字符串:小狗   在院子里玩。找不到匹配项。匹配a上的表达式   非字边界,改为使用\ B:

     

输入您的正则表达式:\ bdog \ B输入要搜索的输入字符串:狗   在院子里玩。找不到匹配。

     

输入您的正则表达式:\ bdog \ B输入要搜索的输入字符串:小狗   在院子里玩。我找到了文字" dog"从索引4开始   以索引7结束。

总之,我无法理解\ b的工作。有人可以帮助我描述它的用法,并帮助我理解这个例子。

由于

5 个答案:

答案 0 :(得分:3)

\b就是你可以称之为"锚点#34;它将匹配输入文本中的位置。

更具体地说,\b将匹配输入文本中的每个位置:

  • 没有前面的字符,后面的字符是单词字符(任何字母或数字,或下划线);
  • 没有跟随字符,前面的字符是单词字符;
  • 前面的字符是单词字符,后面的字符不是;或
  • 以下字符是单词字符,前面的字符不是。

例如,文字dog\b中的正则表达式"my dog eats"将与g dog之后的位置(这是一个单词字符)以及之后的位置匹配空间(不是)。

请注意,与所有锚一样,它与位置匹配的事实意味着它使用任何输入文本。

其他锚点为^$,外观。

答案 1 :(得分:2)

文档似乎无法解释word boundary 究竟是什么。让我试试:

\b匹配字符之间的位置(因此它与任何文本本身都不匹配,它只是断言在字符串中的当前位置满足某个条件)。该条件定义为:

当前位置 之前,有\w(字母数字和下划线)定义的字符集字符。 >当前位置,但不是两者

\B的反之亦然 - 它匹配iff \b在当前位置不匹配。

答案 2 :(得分:0)

简单来说,\b匹配\w\W(如非\w)字符之间的位置, 因此是一个词的结束或开始。字符串的结束/开始在此处计为\W

您可能会找到最常见的\W字符:

  • 空白
  • 逗号
  • 句号
  • 特殊字符(§,$,%,[...])
  • 下划线
  • 任何非ASCII(变音符号,西里尔语,阿拉伯语,[...])

\B只是\b

的反向匹配

- >它匹配\b不匹配的位置(例如[\ w] [\ w]或[\ W] [\ W])

您可以尝试使用java正则表达式here

答案 3 :(得分:0)

\ 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.

答案 4 :(得分:0)

对于\b,如果\b的一侧有'word'字符,则另一侧必须有一个非'字'字符。

对于\B,如果一边有'word'字符,那么另一边也必须有一个'word'字符。如果一边有一个非''字'字符,那么另一边也必须有一个非'字'字符。

'word'字符为A-Za-z0-9_,其他字符不是C语言环境的字词。