我有一个如下的正则表达式:
.{0,1000}(?!(xa7|para(graf))$)
使用 Java。我期待它会导致以下文本失败:
布拉帕拉格拉夫
因为在末尾找到了 paragraf
我有一个如下的正则表达式:
.{0,1000}(?!(xa7|para(graf))$)
使用 Java。我期待它会导致以下文本失败:
布拉帕拉格拉夫
因为在末尾找到了 paragraf
那是因为.{0,1000}
将匹配整个主题,因此它后面没有xa7
或paragraf
(它后面$
只有)。
你想要消极的回顾:
.{0,1000}(?<!xa7|paragraf)$
错误地断言是一个常见的错误。如果你想使用前瞻,模式是这样的:
^(?!.*paragraph$).*$
这匹配(如 rubular.com 上所见):
something something para
paragraph something something
但不匹配:
something paragraph
所以这里的关键区别是我们在匹配之前(或者在你的情况下)从字符串的开头开始向前看。当然,我们要寻找的不仅仅是,而是。.*
.{0,1000}
paragraph$
.*paragraph$
也就是说,要检查字符串是否以有限长度结尾,在支持时向后看是最自然的解决方案。
^.*$(?<!paragraph)