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
否定後視。如果匹配模式立即匹配當前位置的左側,則匹配失敗。 –