2

\B我刚刚对and有了一些概念\b。并且accordinlgy 尝试了一个代码(取自互联网)但无法理解 - 这些输出是如何生成的regexp Anchors。因此,请任何人帮助我理解它们之间的区别,\B\b在内部说明它们pattern matching在 Ruby 中的处理方式?

Interactive ruby ready.
> str = "Hit him on the head\­n" +
      "Hit him on the head with a 2×4\n­"
=> "Hit him on the head
Hit him on the head with a 2??4
"
> str.scan(/­\w+\B/)
=> ["Hi", "hi", "o", "th", "hea", "Hi", "hi", "o", "th", "hea", "wit"]
> str.scan(/­\w+\b/)
=> ["Hit", "him", "on", "the", "head", "Hit", "him", "on", "the", "head", "with", "a", "2", "4"]
> 

谢谢,

4

1 回答 1

6

像大多数小写/大写对一样,它们完全相反:

\b匹配单词边界——也就是说,它匹配两个字母之间的匹配(因为它是零宽度匹配,即匹配时不消耗字符),其中一个属于一个单词,另一个不属于。在文本“<code>this person”中,\b将匹配以下位置(用竖线表示):“<code>|this| |人|”。

\B匹配除单词边界以外的任何地方。它将在以下位置匹配:“<code>t|h|i|sp|e|r|s|o|n”——即在所有字母之间,但不在字母和非字母字符之间。

因此,如果您拥有\w+\b并匹配“<code>this person”,那么您会得到“<code>this”的结果,因为+它是贪婪的,并且匹配尽可能多的单词字符 ( \w),直到下一个单词边界。

\w+\B操作类似,但它不能匹配“<code>this”,因为它后面跟着一个单词边界,这是\B禁止的。所以引擎会回溯一个字符并匹配“<code>thi”。

于 2013-01-16T15:21:04.253 回答