字符串:
this is something that should work (bs) sdf
正则表达式
\b\(bs\)\b
显示未找到匹配项。为什么呢?
这是Rubular上的:http://rubular.com/r/jX2Hy6O0XG
答案 0 :(得分:2)
没有匹配的原因如下。
字边界定义为
(?: # 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
答案 1 :(得分:0)
不匹配的原因是因为空格与(
和)
以及空格之间没有字边界。
请参阅what word boundary matches:
有三种不同的职位符合词边界:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
如果您需要在未附加字词字符时匹配(bs)
,请使用
(?<!\w)\(bs\)(?!\w)
查看Rubular demo。
<强>详情
(?<!\w)
- 一个负面的lookbehind,匹配字符串中没有单词char的位置\(bs\)
- 文字(bs)
字符串(?!\w)
- 与未立即跟随字词char的位置匹配的否定前瞻。