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

Kon*_*ran 13 c# regex

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

Wik*_*żew 15

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

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

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

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

  • 符合POSIX标准的正则表达式引擎需要最长的匹配.另外,Perl6`/pattern1 | pattern2 /`也匹配最长的替代(在大多数其他版本中有一个`||`运算符作为一个简单的`|`来产生第一个找到的替代品). (2认同)