如何否定java正则表达式中的星号?

时间:2012-08-14 22:16:01

标签: java regex regex-negation

我正在尝试创建一个正则表达式,帮助Eclipse的搜索查找包含start(的所有行,但注释行除外。

即找到如下行:

 is not sufficient because it doesn't guarantee that start(b) is 

行如下:

 * is not sufficient because it doesn't guarantee that start(b) is

我已经能够提出正则表达式(\s*?)(?!\*)(.*)(start\()(.*$),但它找到两个行。

如何排除以*开头的行(可能在某些空白之后)并包含没有该行的行?

3 个答案:

答案 0 :(得分:3)

对于以空格开头的行,\s*?可能匹配零空格,然后(?!\*)匹配空格,.*预告片匹配其余空格该行包括星号。

解决方案是将前导空白前导放在否定子句中:

^(?!\s*\*).*start\(.*$

或者你可以使用占有量词来吃掉所有空格并且永远不会回溯:

^\s*+(?!\*).*start\(.*$

答案 1 :(得分:1)

^\s*+(?=[^\*]).*?start\(

^是该行的开头

\s*+对于消耗空白非常贪心

(?=是一个前瞻 - 它匹配一个位置,但不匹配任何文本。这让你正在寻找的东西成为第一件事。

[^\*]是任何不是*

的角色

)结束前瞻

.*?懒惰匹配任何旧垃圾

start\(或您想要找到的任何其他内容

答案 2 :(得分:0)

我会尝试这个^\s*[^\*]+.*start\(.*$