2015-11-19 164 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

相关问题