在Regex中,(?!^)\ G和\ G(?!^)之间有什么区别?

时间:2014-04-28 09:59:38

标签: .net regex

鉴于这两个正则表达式:

(?!^)\G

\G(?!^)

\G锚之前和之后的负向前瞻之间的区别是什么?

2 个答案:

答案 0 :(得分:2)

它们完全相同,因为我们要检查完全正交逻辑条件。实际上,两个例子中的 负面预测

(?!^)

与锚

结合使用
\G

因此,我们要求的是同时

的内容
  • 在上一场比赛结束时或在比赛开始时的 第一场比赛

  • 后面没有跟在字符串开头的任何内容。

答案 1 :(得分:1)

从逻辑上讲,它们是一样的。它们在功能上是等价的。 (?!^)\G检查字符串中相同位置的两个不同条件,因此检查条件的顺序没有逻辑差异。

条件是:

  • (?!^) =“我们不在输入字符串的开头”
  • \G =“我们在上一场比赛结束的位置”

然而,就性能而言,我怀疑(虽然我没有测试过)后者更快。我希望正则表达式引擎有一个优化,这样一个以\G开头的正则表达式只能从前一个匹配的结束开始执行,而另一个正在遍历整个字符串“寻找”该位置上一场比赛。