6

我有一个如下的正则表达式:

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

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

布拉帕拉格拉夫

因为在末尾找到了 paragraf

4

2 回答 2

9

那是因为.{0,1000}将匹配整个主题,因此它后面没有xa7paragraf(它后面$只有)。

你想要消极的回顾:

.{0,1000}(?<!xa7|paragraf)$
于 2010-06-10T00:19:04.630 回答
9

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

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

这匹配(如 rubular.com 上所见):

something something para
paragraph something something

但不匹配:

something paragraph

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

也就是说,要检查字符串是否以有限长度结尾,在支持时向后看是最自然的解决方案。

^.*$(?<!paragraph)
于 2010-06-10T08:48:49.967 回答