(..|. .. .|..)
运算符中表达式的优先顺序是什么 - 从左到右,从右到左或其他什么?
答案 0 :(得分:14)
从左到右,第一个替代匹配"胜出",其他未被检查。这是典型的NFA正则表达式行为。 regular-expressions.info Alternation page提供了对该行为的良好描述。
请注意,RegexOptions.RightToLeft
仅使正则表达式引擎从右到左检查输入字符串,修饰符不会影响正则表达式引擎处理模式本身的方式。
让我举例说明:如果您使用(aaa|bb|a)
正则表达式并尝试使用bbac
在Regex.Match
中找到匹配项,则您获得的值为bb
,因为{{ 1}}替代出现在a
之后。如果您使用bbb
,则会收到所有匹配项,Regex.Matches
和bb
都会出现在您的搜索结果中。
此外,从左到右检查正则表达式模式的事实清楚地表明,在非锚定的替代组内,替代的顺序重要。如果您使用a
正则表达式与(a|aa|aaa)
匹配,则第一个abbccaa
替代方案将匹配字符串中的每个a
(请参阅regex demo)。添加单词边界后,您可以按任意顺序放置备选项(请参阅one more regex demo)。