我有以下正则表达式:
.{0,1000}(?!(xa7|para(graf))$)
使用Java。 我原以为它会导致以下文本失败:
blaparagraf
因为在最后找到了paragraf
答案 0 :(得分:7)
这是因为.{0,1000}
会匹配整个主题,因此xa7
或paragraf
(后面只有$
)不会跟着它。
你想要负面的背后隐藏:
.{0,1000}(?<!xa7|paragraf)$
答案 1 :(得分:4)
错误地置位断言是一个常见的错误。如果你想使用lookahead,模式是这样的:
^(?!.*paragraph$).*$
something something para
paragraph something something
但不匹配:
something paragraph
所以这里的关键区别是我们在匹配.*
(或你的.{0,1000}
)之前开始展望字符串的开头。当然,我们所寻找的不仅仅是paragraph$
,而是.*paragraph$
。
那就是说,要检查一个字符串是不是以一个有限长度的东西结束,支持后看是最自然的解决方案。
^.*$(?<!paragraph)