扩展我的基本正则表达式知识,有些事情对我来说不清楚。
如果\b
匹配单词边界,则下两个正则表达式具有相同的含义 - 例如会匹配相同的字符串吗?
/\bword\b/
/(^|\W)word(\W|$)/m #when multi-line is turned on
/(\A|\W)word(\W|\z)/
问因为\b
表示字边界。这个词是\w+
,因此\b
必须是不是\w
的任何内容,例如它必须是\W
或字符串或行的开头或结尾。 (或者没有?)(不计算捕获组,可能会更好地使用一些非捕获外观)。
和那两个?
/word\B/
/word\w/
如果字必须是"非字边界"最后,这意味着单词必须后跟\w
(单词)字符。 (或没有?)
答案 0 :(得分:5)
(忽略以下模式中的空格。我假设/x
用于提高可读性。)
\b
相当于
(?<!\w)(?=\w) | (?<=\w)(?!\w)
所以
\b word \b
相当于
(?: (?<!\w)(?=\w) | (?<=\w)(?!\w) ) word (?: (?<!\w)(?=\w) | (?<=\w)(?!\w) )
简化为
(?<!\w) word (?!\w)
您建议的等价物略有不同。
\B
相当于
(?<=\w)(?=\w) | (?<!\w)(?!\w)
所以
word \B
相当于
word (?: (?<=\w)(?=\w) | (?<!\w)(?!\w) )
简化为
word (?=\w)
您建议的等效内容(word\w
)略有不同。
答案 1 :(得分:3)
\bword
与(?<!\w)word
相同,word\b
与word(?!\w)
相同
\Bword
等于(?<=\w)word
且word\B
等于word(?=\w)