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

use*_*694 5 java regex negative-lookahead

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

.{0,1000}(?!(xa7|para(graf))$)
Run Code Online (Sandbox Code Playgroud)

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

blaparagraf

因为最后发现了paragraf

Art*_*cto 7

那是因为它.{0,1000}会匹配整个主题,因此它不会跟着xa7paragraf($仅后跟).

你想要负面的看法:

.{0,1000}(?<!xa7|paragraf)$
Run Code Online (Sandbox Code Playgroud)


pol*_*nts 5

错误地放置断言是一个常见的错误。如果要使用超前模式,则模式如下所示:

^(?!.*paragraph$).*$
Run Code Online (Sandbox Code Playgroud)

这匹配(如在rubular.com上看到的):

something something para
paragraph something something
Run Code Online (Sandbox Code Playgroud)

但不匹配:

something paragraph
Run Code Online (Sandbox Code Playgroud)

因此,这里的主要区别是我们在匹配之前(或在您的情况下)从字符串的开头开始向前看。当然,我们寻找的不是简单的而是。.*.{0,1000}paragraph$.*paragraph$

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

^.*$(?<!paragraph)
Run Code Online (Sandbox Code Playgroud)