正则表达式运算符的顺序(.. | .. … .. | ..)

(..|. .. .|..)运算符中表达式的优先级顺序是什么 – 从左到右,从右到左或其他什么?

从左到右,第一个替代匹配“胜利”,其他未检查。 这是典型的NFA正则表达式行为。 regular-expressions.info Alternation页面提供了对该行为的良好描述。

请注意, RegexOptions.RightToLeft仅使正则表达式引擎从右到左检查输入字符串,修饰符不会影响正则表达式引擎处理模式本身的方式。

让我举例说明:如果你有一个(aaa|bb|a)正则表达式并尝试使用Regex.Matchbbac找到一个匹配Regex.Match ,你将获得的值是bb因为在bbb之后出现a替代方案。 如果您使用Regex.Matches ,您将获得所有匹配,并且bba将落在您的结果中。

此外,从左到右检查正则表达式模式的事实清楚地表明, 在非锚定的替代组内,替代方案的顺序很重要 。 如果使用(a|aa|aaa)正则表达式来匹配abbccaa ,则第a替代方法将匹配字符串中的每个a (请参阅正则表达式演示 )。 添加单词边界后,您可以按任何顺序放置替代项(请参阅另一个正则表达式演示 )。