积极的&消极的前瞻和量词

时间:2015-02-21 09:10:05

标签: regex preg-match

有人可以向我解释为什么模式(负向前瞻)

/aa.+(?!cc)/g

匹配所有4行

aabbcc
aabb
aabbcc
aabb

虽然我预计只会匹配以下两行:

aabbcc
aabb
aabbcc
aabb

模式(正向前瞻):

/aa.+(?=cc)/g

只匹配2行:

aabbcc
aabb
aabbcc
aabb

正如我所想的那样?

我使用的是PCRE风味的RegEx引擎。

2 个答案:

答案 0 :(得分:4)

正确的否定前瞻正则表达式是:

/^aa((?!cc).)+$/gm

RegEx Demo

只要没有aa直到行结束,这将匹配cc之后的任何内容。

答案 1 :(得分:3)

因为此模式.+中的aa.+(?!cc)匹配所有字符到最后。由于最后一个字符串cc不存在,因此该正则表达式匹配所有上述字符串。

aa(?!.*cc).+

修改上面的正则表达式以匹配第2行和第4行。 (?!.*cc)否定前瞻断言,后面的字符串中不会出现字符串cc,这些字符串将使用.+模式进行匹配。

DEMO