扩展我的基本正则表达式知识,有些事情对我来说不清楚.
如果\b匹配词边界具有相同的意思的下两个正则表达式 - 例如将匹配相同的字符串?
/\bword\b/
/(^|\W)word(\W|$)/m #when multi-line is turned on
/(\A|\W)word(\W|\z)/
Run Code Online (Sandbox Code Playgroud)
问,因为\b手段词边界.这个词是\w+,所以\b必须是什么不是\w,例如它必须是\W或字符串或行的开头或结尾.(或没有?)(不计算捕获组,可能会更好地使用一些非捕获外观 - 某处).
那两个?
/word\B/
/word\w/
Run Code Online (Sandbox Code Playgroud)
如果单词最后必须是"非字边界",则表示该单词必须后跟\w(单词)字符.(或没有?)
(忽略以下模式中的空格.我假设/x用于可读性.)
\b
Run Code Online (Sandbox Code Playgroud)
相当于
(?<!\w)(?=\w) | (?<=\w)(?!\w)
Run Code Online (Sandbox Code Playgroud)
所以
\b word \b
Run Code Online (Sandbox Code Playgroud)
相当于
(?: (?<!\w)(?=\w) | (?<=\w)(?!\w) ) word (?: (?<!\w)(?=\w) | (?<=\w)(?!\w) )
Run Code Online (Sandbox Code Playgroud)
这简化为
(?<!\w) word (?!\w)
Run Code Online (Sandbox Code Playgroud)
您建议的等价物略有不同.
\B
Run Code Online (Sandbox Code Playgroud)
相当于
(?<=\w)(?=\w) | (?<!\w)(?!\w)
Run Code Online (Sandbox Code Playgroud)
所以
word \B
Run Code Online (Sandbox Code Playgroud)
相当于
word (?: (?<=\w)(?=\w) | (?<!\w)(?!\w) )
Run Code Online (Sandbox Code Playgroud)
这简化为
word (?=\w)
Run Code Online (Sandbox Code Playgroud)
您建议的等效(word\w)略有不同.