2015-11-19 76 views
2

我需要以美元符號$開頭的匹配「單詞」。

我曾嘗試以下的正則表達式:

\b\$banana\b 

但這得出以下結果:

few words have$banana // match, but should not 
few words have $banana // not match, but should 

我不明白爲什麼會這樣。

我需要找到單詞,所以第一個案例不必匹配,只有第二個必須匹配。我哪裏錯了?

我使用Java進行測試,但正則表達式必須獨立於編程語言工作。

+0

你想既要匹配?你的預期結果是什麼? –

+0

我只需要找到這個'只有幾個詞有$ banana'的單詞就不需要匹配。 – theShadow89

+0

然後選擇波希米亞的答案,或者我也可以發佈['(?<!\\ w)[$] banana \\ b'](https://regex101.com/r/nB0bI6/2)。 –

回答

4

使用 「不是一個單詞邊界」 一詞\B

\B\$banana\b 

因爲$不是一個字的字符,你想匹配的地方ch之前的$不是char字符;這個正則表達式不匹配foo$banana,但會匹配foo $banana

live demo顯示

foo $banana bar (match) 
foo$banana bar (no match) 
foo $bananabar (no match) 
1
(?:^|(?<=\s))\$banana\b 

這應該爲你做。參見演示。

https://regex101.com/r/nB0bI6/1

原因你不工作是怎麼把第一\b,因爲沒有word boundary$

+0

爲什麼downvoted ?? – vks

相關問題