this is something that should work (bs) sdf
正则表达式
\b\(bs\)\b
显示没有找到的匹配。为什么?
这是Rubular:http://rubular.com/r/jX2Hy6O0XG
this is something that should work (bs) sdf
正则表达式
\b\(bs\)\b
显示没有找到的匹配。为什么?
这是Rubular:http://rubular.com/r/jX2Hy6O0XG
没有匹配的原因如下。
词边界被定义为
(?: # Cluster start
(?: # -------
^ # Beginning of string anchor
| # or,
(?<= [^a-zA-Z0-9_]) # Lookbehind assertion for a char that is NOT a word
) # -------
(?= [a-zA-Z0-9_]) # Lookahead assertion for a char that is IS a word
| # or,
(?<= [a-zA-Z0-9_]) # Lookbehind assertion for a char that is IS a word
(?: # -------
$ # End of string anchor
| # or,
(?= [^a-zA-Z0-9_]) # Lookahead assertion for a char that is NOT a word
) # -------
) # Cluster end
那么,是什么\b\(
比赛?
如果(
不是一个单词,然后\b
需要一个字向左
即。 (?<=[a-zA-Z0-9_])(
。但是之前它是一个空间,所以
没有匹配。
与)\b
相同,即)(?=[a-zA-Z0-9_])
但是再一次,后面是空格。
如果你想一个空白的边界,你会使用
(?<!\S)(..)(?!\S)
这确保空格或BOS/EOS位置之前和之后。
,或者,如果你需要确保无字边界使用负字边界
\B(..)\B
不是一切都是愚蠢的 – sln
有不匹配的原因是因为有一个空间,(
和)
和空间之间没有字的边界。
有迹象表明,有资格作为单词边界的三个不同位置:
- 字符串中的第一个字符之前,如果第一个字符是一个单词字符。
- 在字符串中的最后一个字符后面,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
如果您需要匹配(bs)
时不与字字符封闭的,使用
(?<!\w)\(bs\)(?!\w)
看到一个Rubular demo。
详细
(?<!\w)
- 文字(bs)
串(?!\w)
- - 该位置在没有前面有一个字字符\(bs\)
字符串相匹配的负回顾后负前瞻匹配一个不会立即跟随单词char的位置。
而且通常提示:如果您需要匹配'(BS)'时不使用Word封闭字符,请使用'(?<!\ w)\(bs \)(?!\ w)'。 –
你能让我知道'<!'的意义在你的表达中吗? – Anthony
否定后视。如果匹配模式立即匹配当前位置的左侧,则匹配失败。 –