2016-03-07 23 views
5

Perl regular expressionsの優先ルールの公式リファレンスは見つかりません。私が見つけることができるのはKnow the precedence of regular expression operatorsです。しかし、それはperldocによって与えられる公式の参照ではありません。Perl正規表現の優先順位ルールは何ですか?

+0

はperlreはセクションが含まれています*バージョン8つの正規表現*メカニズムに一致する正規表現パターンの口頭説明を提供します。 – laune

+0

@laune、私はちょうど_Version 8 Regular Expressions_を閲覧しました。しかし、優先順位に関連するものは何も見つかりません。優先順位との関連性を教えてください。 –

+2

私はこのテキストがこの問題を明確にしていると思いますが、行の間に(ちょっと)読む必要があるかもしれません。 - とにかく、(初期)* nixユーティリティ、awk、Perl4、Perl5、Java、XMLスキーマ、その他の多くの正規表現システムの中のかっこ、数量子、並置と代替の優先順位について疑問はありませんでした。 - あなたを悩ましているのは何ですか? – laune

答えて

4

正規表現には2つのバイナリ演算子しかありません。そのうちの1つはシンボルではなく暗黙的です。正規表現にも多くの単項演算子がありますが、その優先順位は、そのオペランドの制限のために疑問です。それで、優先順位について話すのが本当に奇妙になります。

それはあなたが次の文を使用して求める情報伝達簡単です:

  • 量指定子は、単一の原子を変更します。
  • 修飾子修飾子は、単一の修飾子を変更します。
  • 交替は、それらが存在する括弧を除いて無制限です。

上記の情報はperlretutのいずれかの方法で伝えられます。


つまり、優先テーブルを作成することができます。上記のステートメントは必要なすべての情報を伝えるので、そこから優先順位テーブルを作成することができます。それは以下の通りです:

  1. 原子(例えばa\n\^.^\w[...]\1(...))暗黙
  2. Postfixの単項演算子(数量と数量詞の修飾)
  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> | "" 
+0

あなたはそれをする必要はありませんでした、それは既に偉大だった:) – Aaron