正则表达式匹配以" $"开头的单词

时间:2015-11-19 15:50:21

标签: java regex

我需要匹配"单词"以美元符号$开头。

我尝试过以下正则表达式:

\b\$banana\b

但这会产生以下结果:

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

我无法理解为什么会这样。

我需要找到单词,所以第一种情况不必匹配,只有第二种情况必须匹配。我哪里错了?

我使用Java进行测试,但正则表达式必须独立于编程语言。

2 个答案:

答案 0 :(得分:4)

使用“非单词边界”一词\B

\B\$banana\b

由于$ 不是字词,因此您希望匹配$之前的字符 而不是字char的位置;此正则表达式与foo$banana不匹配,但会匹配foo $banana

live demo显示

foo $banana bar (match)
foo$banana bar (no match)
foo $bananabar (no match)

答案 1 :(得分:1)

(?:^|(?<=\s))\$banana\b

这应该为你做。参见演示。

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

由于\b

之前没有word boundary,因此第一个$的原因是CREATE TABLE transaction ( id INT NOT NULL, accountnumber VARCHAR2(30) NOT NULL, stmtvaluedate DATE NOT NULL ) PARTITION BY RANGE (stmtvaluedate) INTERVAL (NUMTOYMINTERVAL (1,'MONTH')) ( partition transaction_old values less than (to_date('01-JAN-2000','DD-MON-YYYY') ));