鉴于这两个正则表达式:
(?!^)\G
和
\G(?!^)
\G
锚之前和之后的负向前瞻之间的区别是什么?
答案 0 :(得分:2)
它们完全相同,因为我们要检查完全正交逻辑条件。实际上,两个例子中的 负面预测
(?!^)
与锚
结合使用\G
因此,我们要求的是同时
的内容在上一场比赛结束时或在比赛开始时的 第一场比赛
后面没有跟在字符串开头的任何内容。
答案 1 :(得分:1)
从逻辑上讲,它们是一样的。它们在功能上是等价的。 (?!^)
和\G
检查字符串中相同位置的两个不同条件,因此检查条件的顺序没有逻辑差异。
条件是:
(?!^)
=“我们不在输入字符串的开头”\G
=“我们在上一场比赛结束的位置”然而,就性能而言,我怀疑(虽然我没有测试过)后者更快。我希望正则表达式引擎有一个优化,这样一个以\G
开头的正则表达式只能从前一个匹配的结束开始执行,而另一个正在遍历整个字符串“寻找”该位置上一场比赛。