交替的正则表达式分组规则

Regex grouping rules for alternation

正则表达式引擎如何知道以下内容:

lions|starz|summit

分组为:

(?:lions)|(?:starz)|(?:summit)

不是,比如:

lion(?:s|s)tar(?:z|s)ummit

是否有关于交替的规则描述'how far back'应该去或如何确定?

竖线符号 (|) 是一个特殊字符,不能在您要匹配的短语中使用,除非您对其进行转义。

因此,正则表达式引擎会读取不特殊的字符,直到遇到特殊字符并决定从那里做什么。

在你的情况下,它读取并包括 lions,然后找到一个特殊的 |,告诉它后面有一个替代项,即 starz,然后是另一个特殊的 | |,表示下一个选择。

因此,一旦完成,它就知道需要匹配 lionsstarzsummit.

中的任何一个

它不会将其误认为 lion(?:s|s)tar(?:z|s)ummit 之类的原因仅仅是因为您没有为其提供特殊字符 (? 等 - 所以没有混淆。

并且没有关于它需要“倒退多远”的规则,如果有的话,它只是从第一个字符继续前进,直到它碰到告诉它停止的东西。你可以有 100 多个选择,它仍然会匹配其中任何一个。

如果您想匹配其中包含竖线符号的文本,您可以使用反斜杠 (\) 将其转义,例如 before\|after