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

Jin*_*Yao 5 regex perl

我找不到Perl正则表达式的优先规则的官方参考.我能找到的只是了解正则表达式运算符的优先级.但是,它不是perldoc给出的官方参考.

ike*_*ami 5

正则表达式只有两个二进制运算符,其中一个是隐式的,而不是用符号表示的。正则表达式也具有许多一元运算符,但是由于对它们的操作数的限制,它们的优先级没有意义。这使得谈论优先级确实很奇怪。

使用以下语句可以更轻松地传达您想要的信息:

  • 量词修饰单个原子。
  • 量词修饰符可修饰单个量词。
  • 除了它们所驻留的paren以外,其他都不受限制。

以上信息在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> | ""
Run Code Online (Sandbox Code Playgroud)