Perl正则表达式的优先级规则是什么?

5

perlre 包含一个名为“Version 8 Regular Expressions”的部分,其中提供了对正则表达式模式匹配机制的口述描述。 - laune
@laune,我刚刚浏览了《第8版正则表达式》。但是我找不到任何与优先级相关的内容。您能指出它与优先级有什么关系吗? - Jingguo Yao
2
我认为这个文本澄清了问题,但你可能需要在字里行间读一下。不管怎样,在任何正则表达式系统中,括号、量词、并置和替代的优先级从未存在过疑问,包括早期的*nix实用程序、awk、Perl4、Perl5、Java、XML模式等等。你有什么困扰吗? - laune
@laune,感谢您的澄清。我只是想要一个明确规定运算符优先级规则的权威参考资料。 - Jingguo Yao
如果您需要正式的文件,可以查看file:///home/XML/XML%20Schema%20Part%202%3A%20Datatypes%20Second%20Edition.html#regexs,它不是Perl,但它定义了适用于所有正则表达式语言的语法基础。 - laune
1个回答

5
正则表达式只有两个二进制运算符,其中一个是隐含的,而不是用符号表示。正则表达式还有许多一元运算符,但由于它们的操作数的限制,它们的优先级无关紧要。这使得谈论优先级变得非常奇怪。
使用以下语句传达您所需的信息更简单:
- 量词修改单个原子。 - 量词修饰符修改单个量词。 - 交替除了括号外没有限制。
以上信息在 perlretut 中以某种方式传达。
那么,构建一个优先级表是可能的。由于上述语句传达了您所需的所有信息,因此可以从中构建优先级表。它如下所示:
  1. 原子(例如 a\n\^.^\w[...]\1(...)
  2. 后缀一元运算符(量词和量词修饰符)
  3. (可能量化的)原子之间的隐式“后跟”运算符
  4. 交替
这与您链接到的页面中的图表相匹配。

仅供娱乐,以下是BNF:

pattern              ::= <alternation>

alternation          ::= <sequence> <alternation2>
alternation2         ::= "|" <alternation> | ""

sequence             ::= <quantified_atom> <sequence> | ""

quantified_atom      ::= <atom> <quantified_atom2>
quantified_atom2     ::= <modified_quantifier> | ""
modified_quantifier  ::= <quantifier> <modified_quantifier2>
modified_quantifier2 ::= <quantifier_modifier> | ""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接