【发布时间】:2011-03-01 22:44:43
【问题描述】:
我有一个如下的正则表达式:
.{0,1000}(?!(xa7|para(graf))$)
使用 Java。 我期待它会导致以下文本失败:
废话
因为在末尾找到了paragraf
【问题讨论】:
标签: java regex negative-lookahead
我有一个如下的正则表达式:
.{0,1000}(?!(xa7|para(graf))$)
使用 Java。 我期待它会导致以下文本失败:
废话
因为在末尾找到了paragraf
【问题讨论】:
标签: java regex negative-lookahead
错误放置断言是一个常见的错误。如果你想使用前瞻,模式是这样的:
^(?!.*paragraph$).*$
这匹配 (as seen on rubular.com):
something something para
paragraph something something
但不匹配:
something paragraph
所以这里的关键区别在于,我们在匹配.*(或在您的情况下为.{0,1000})之前,开始查看字符串的开头。当然,我们要找的不仅仅是paragraph$,而是.*paragraph$。
也就是说,要检查字符串是否以有限长度结尾,在支持时向后查找是最自然的解决方案。
^.*$(?<!paragraph)
【讨论】:
这是因为.{0,1000} 将匹配整个主题,因此它后面没有xa7 或paragraf(它后面只有$)。
你想要消极的向后看:
.{0,1000}(?<!xa7|paragraf)$
【讨论】: