正面和负面前瞻和量词
Positive & negative lookaheads and quantifiers
有人可以向我解释为什么该模式(负前瞻)
/aa.+(?!cc)/g
匹配所有 4 行
aabbcc
aab
aabbcc
aab
虽然我原以为只有以下 2 行会匹配:
aabbcc
aabb
aabbcc
aabb
模式(正面前瞻):
/aa.+(?=cc)/g
只匹配 2 行:
aabbcc
aab
aabbcc
aab
如我所料?
我正在使用 PCRE 风格的 RegEx 引擎。
因为 .+
在这个模式中 aa.+(?!cc)
匹配所有字符直到结尾。由于在最后一个字符串之后不存在字符串 cc
,因此此正则表达式匹配上述所有字符串。
aa(?!.*cc).+
像上面那样修改你的正则表达式以匹配第二行和第四行。 (?!.*cc)
negative lookahead 断言不会有字符串 cc
出现在将使用 .+
模式匹配的后续字符串中。
正确的负前瞻正则表达式是:
/^aa((?!cc).)+$/gm
这将匹配 aa
之后的任何内容,只要行尾没有 cc
。
有人可以向我解释为什么该模式(负前瞻)
/aa.+(?!cc)/g
匹配所有 4 行
aabbcc aab aabbcc aab
虽然我原以为只有以下 2 行会匹配:
aabbcc aabb aabbcc aabb
模式(正面前瞻):
/aa.+(?=cc)/g
只匹配 2 行:
aabbcc aab aabbcc aab
如我所料?
我正在使用 PCRE 风格的 RegEx 引擎。
因为 .+
在这个模式中 aa.+(?!cc)
匹配所有字符直到结尾。由于在最后一个字符串之后不存在字符串 cc
,因此此正则表达式匹配上述所有字符串。
aa(?!.*cc).+
像上面那样修改你的正则表达式以匹配第二行和第四行。 (?!.*cc)
negative lookahead 断言不会有字符串 cc
出现在将使用 .+
模式匹配的后续字符串中。
正确的负前瞻正则表达式是:
/^aa((?!cc).)+$/gm
这将匹配 aa
之后的任何内容,只要行尾没有 cc
。