正则表达式后续前瞻语句

Regex subsequent lookahead statements

我试图了解正则表达式引擎处理带有后续前瞻语句的表达式的方式。我觉得我可以用两个例子 (javascript syntax) 来最好地说明我的问题。如果我不使用术语,请原谅我。

没有前瞻的示例:

/a(.*b)(.*c)/

这将匹配包含 a 的表达式,该表达式在某些时候后跟 b,而在某些时候后跟 c。所以第二个原子团(.*c)"applies"到第一个原子团(.*b)abc 将满足此表达式,但 acb 不会。

前瞻示例:

/a(?=.*b)(?=.*c)/ == /a(?=.*c)(?=.*b)/

这将匹配一个 a,如果它在某个时候后面跟着一个 b 并且 它在某个时候也跟着一个 c。因此,无论顺序如何,两个原子组都适用于 a 字符:a 将在 abcacb.

中匹配

所以我猜想正则表达式引擎对待前瞻(和后视?)组的方式与对待其他组的方式不同——它们是否会在每个之后返回到 "main" 表达式(在本例中为 a)遇到超前时间?

提前感谢您的帮助。

Lookaround actually matches characters, but then gives up the match, returning only the result: match or no match.

您可以找到更多信息here