失败的负​​面预测

时间:2016-04-05 23:16:02

标签: regex regex-lookarounds

我在下面两行尝试了这个正则表达式<a class="checkSomething" href="https://something.com"

^([^i]|i(?!s OK))+\.$

我希望这个正则表达式匹配第一个而不是第二个。但它没有匹配。为什么呢?

如果我使用正向前瞻1. /tmp/tmp.oW75zGUh4S ... is O. 2. /tmp/tmp.oW75zGUh4S ... is OK. ,那么它匹配第二个但不是第一个,这是预期的行为。

1 个答案:

答案 0 :(得分:0)

在regex101.com上测试后,我发现\n丢失了。正确的正则表达式是^([^i\n]|i(?!s OK))+$

谢谢Wrikken。

更新:只是解释为什么缺少\n^( ... )+$是贪婪的,这意味着它会吃掉所有可能的字符,直到它不能,而[^i]会吃掉任何一个不是i的字符,所以即便结束在线人物。另外,我错误地认为,因为$意味着匹配必须以行尾结束,所以匹配不可能以与预防相同的方式越过行尾边界.通过设置正确的标志来越过行尾边界。 $可以表示整个字符串的结尾,但我使用了一个标志来阻止它。