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

时间:2016-02-24 15:39:17

标签: c# regex

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

1 个答案:

答案 0 :(得分:14)

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

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

让我举例说明:如果您使用(aaa|bb|a)正则表达式并尝试使用bbacRegex.Match中找到匹配项,则您获得的值为bb,因为{{ 1}}替代出现在a之后。如果您使用bbb,则会收到所有匹配项,Regex.Matchesbb都会出现在您的搜索结果中。

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