交替的正则表达式分组规则
Regex grouping rules for alternation
正则表达式引擎如何知道以下内容:
lions|starz|summit
分组为:
(?:lions)|(?:starz)|(?:summit)
不是,比如:
lion(?:s|s)tar(?:z|s)ummit
是否有关于交替的规则描述'how far back'应该去或如何确定?
竖线符号 (|
) 是一个特殊字符,不能在您要匹配的短语中使用,除非您对其进行转义。
因此,正则表达式引擎会读取不特殊的字符,直到遇到特殊字符并决定从那里做什么。
在你的情况下,它读取并包括 lions
,然后找到一个特殊的 |
,告诉它后面有一个替代项,即 starz
,然后是另一个特殊的 |
|
,表示下一个选择。
因此,一旦完成,它就知道需要匹配 lions
、starz
和 summit
.
中的任何一个
它不会将其误认为 lion(?:s|s)tar(?:z|s)ummit
之类的原因仅仅是因为您没有为其提供特殊字符 (
、?
等 - 所以没有混淆。
并且没有关于它需要“倒退多远”的规则,如果有的话,它只是从第一个字符继续前进,直到它碰到告诉它停止的东西。你可以有 100 多个选择,它仍然会匹配其中任何一个。
如果您想匹配其中包含竖线符号的文本,您可以使用反斜杠 (\
) 将其转义,例如 before\|after
正则表达式引擎如何知道以下内容:
lions|starz|summit
分组为:
(?:lions)|(?:starz)|(?:summit)
不是,比如:
lion(?:s|s)tar(?:z|s)ummit
是否有关于交替的规则描述'how far back'应该去或如何确定?
竖线符号 (|
) 是一个特殊字符,不能在您要匹配的短语中使用,除非您对其进行转义。
因此,正则表达式引擎会读取不特殊的字符,直到遇到特殊字符并决定从那里做什么。
在你的情况下,它读取并包括 lions
,然后找到一个特殊的 |
,告诉它后面有一个替代项,即 starz
,然后是另一个特殊的 |
|
,表示下一个选择。
因此,一旦完成,它就知道需要匹配 lions
、starz
和 summit
.
它不会将其误认为 lion(?:s|s)tar(?:z|s)ummit
之类的原因仅仅是因为您没有为其提供特殊字符 (
、?
等 - 所以没有混淆。
并且没有关于它需要“倒退多远”的规则,如果有的话,它只是从第一个字符继续前进,直到它碰到告诉它停止的东西。你可以有 100 多个选择,它仍然会匹配其中任何一个。
如果您想匹配其中包含竖线符号的文本,您可以使用反斜杠 (\
) 将其转义,例如 before\|after