.NET Regex类的运算符优先级记录在哪里?

4xy9mtcn  于 2023-06-25  发布在  .NET
关注(0)|答案(3)|浏览(91)

.NET Regex类的运算符优先级顺序记录在哪里?
我看到了this,但那是针对JScript的。
此外,这似乎不受RegexOptions.ECMAScript的影响,但确认会有所帮助。

but5z9lq

but5z9lq1#

很久以前就有人问过这个问题,但没有回答。
.Net正则表达式运算符precidence在正则表达式语法页面1的底部定义。

92dk7w1h

92dk7w1h2#

我不认为真实的的答案像你想的那么简单。简短的(不完整的)答案很简单:“所有表达式都从左到右求值”……
对于长的答案去这里。
http://msdn.microsoft.com/en-us/library/e347654k.aspx
.NET Framework正则表达式引擎是一个回溯正则表达式匹配器,它集成了传统的非确定性有限自动机(NFA)引擎...传统的NFA引擎执行模式匹配,它们的处理顺序由正则表达式模式驱动。当它处理一个特定的语言元素时,引擎使用贪婪匹配;也就是说,它尽可能多地匹配输入字符串。但它也会在成功匹配子表达式后保存其状态。如果匹配最终失败,则引擎可以返回到已保存状态,以便它可以尝试其他匹配。

**编辑:忘记回答问题的第二部分。

关于RegexOptions.ECMAScript,您可以参考以下文档:
http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx
ECMAScript和规范正则表达式的行为在三个方面有所不同:字符类语法、自引用捕获组以及八进制与反向引用解释。
看起来“秩序”没有受到影响,但可能还有其他问题。文档在说明差异方面做得很好。

ymdaylpp

ymdaylpp3#

为了澄清Donald Rich's answer,Microsoft没有为.NET Regex引擎提供文档化的优先顺序。然而,他们确实记录了旧的Visual Studio 2010 JScript引擎的优先级顺序,这似乎与.NET的行为方式相匹配。我在下面复制了它,以防微软文档消失。
从正则表达式语法>优先顺序:
正则表达式的计算方式与算术表达式非常相似;也就是说,它从左到右进行评估,并遵循优先级顺序。
下表包含正则表达式运算符的优先级顺序(从最高到最低)。
| 操作员或操作员|说明|
| - -----|- -----|
| |逃脱|
| (),(?:),(?=),[]|括号和括号|
| * ,+,?,{n},{n,},{n,m}|量词|
| ^,$,\anymetacharacter|锚点和序列|
| | |交替|
字符的优先级高于交替运算符,例如,交替运算符允许“m| food”匹配“m”或“food”。

相关问题