给定这两个正则表达式:
(?!^)\G
并且
\G(?!^)
"
在\G
锚点之前和之后使用负向先行断言有什么区别?
它们完全相同,因为我们将检查完全正交的逻辑条件。 实际上,在两个示例中都使用了负向预查。
(?!^)
\G
在前一个匹配的结尾或者字符串的开头进行匹配
不跟随任何在字符串开头的内容。
(?!^)\G
或\G(?!^)
(根据原始问题)。虽然你对(?!^)\Gabc
和\Gabc
的理解肯定是正确的,但它们是全新的正则表达式。 - Roberto Reale(?!^)
和 \G
在字符串中的相同位置检查两个不同的条件,因此检查顺序没有逻辑差异。(?!^)
= “我们不在输入字符串的开头”。
- \G
= “我们在前一个匹配结束的位置”。\G
开头的正则表达式仅从前一个匹配的结尾处开始执行,而另一个则会在整个字符串中“寻找”前一个匹配的位置。
\G
和负向先行断言是完全正交的。无论另一个是否存在,每个都会执行其预定功能。 - Jon\K(?=.*\d)foo
与(?=.*\d)\Kfoo
之间的区别? - HamZa