如何使用行尾文本进行负前瞻工作

时间:2010-06-09 23:53:31

标签: java regex negative-lookahead

我有以下正则表达式:

.{0,1000}(?!(xa7|para(graf))$)

使用Java。 我原以为它会导致以下文本失败:

blaparagraf

因为在最后找到了paragraf

2 个答案:

答案 0 :(得分:7)

这是因为.{0,1000}会匹配整个主题,因此xa7paragraf(后面只有$)不会跟着它。

你想要负面的背后隐藏:

.{0,1000}(?<!xa7|paragraf)$

答案 1 :(得分:4)

错误地置位断言是一个常见的错误。如果你想使用lookahead,模式是这样的:

^(?!.*paragraph$).*$

匹配(as seen on rubular.com):

something something para
paragraph something something

但不匹配:

something paragraph

所以这里的关键区别是我们在匹配.*(或你的.{0,1000})之前开始展望字符串的开头。当然,我们所寻找的不仅仅是paragraph$,而是.*paragraph$

那就是说,要检查一个字符串是不是以一个有限长度的东西结束,支持后看是最自然的解决方案。

^.*$(?<!paragraph)