4

Perl で「正規表現」と呼ばれる文字列を解析するためのエンジンは、本で「正規表現」という用語で知られているものとは大きく異なります。

それで、私の質問は次のとおりです。Perlの正規表現の実装と、それが古典的なものと実際にどのように、どのように異なるかを説明するドキュメントはありますか(古典とは、通常のDFA / NFAに実際に変換できる正規表現を意味します)、どのようにできます?

ありがとうございました。

4

5 に答える 5

7

もちろん、Perl 正規表現は Perl 正規表現、または略して正規表現と呼ばれます。パターンやルールと呼ばれることもあります。しかし、それら何であるか、少なくともそうなる可能性があるのは、再帰降下パーサーです。それらは再帰的なバックトラッカーを使用して実装されますが、DFA で解決可能なタスクをオフロードしたい場合は、 DFA エンジンに切り替えることができます。

以下は、これらの問題に関するいくつかの関連する引用です。

正規表現(またはregex )を作成してパターンを指定すると、Perl の正規表現エンジン (この章の残りの部分では「エンジン」) がその表現を取得し、パターンがデータに一致するかどうか (およびその方法) を判断します。ほとんどのデータはおそらくテキスト文字列ですが、正規表現を使用して任意のバイト シーケンスを検索および置換することを妨げるものは何もありません。これは通常「バイナリ」データと考えられるものであっても同様です。Perl にとって、バイトはたまたま 256 未満の序数を持つ文字です。

他の場所の正規表現に精通している場合は、Perl では正規表現が少し異なることに注意してください。まず、理論的な意味で完全に「正規」であるとは限りません。つまり、コンピュータ サイエンスの授業で教えられる従来の正規表現よりもはるかに多くのことができるということです。 第二に、これらは Perl で非常に頻繁に使用されるため、他のライブラリのように緩く固定されているだけでなく、言語に緊密に統合された独自の特殊な変数、演算子、および引用規則があります。

      —プログラミング Perl、Larry Wall、Tom Christiansen、Jon Orwant 著

これはパターン マッチングに関する黙示録であり、一般に、 実際の正規表現とはわずかにしか関連していない「正規表現」と呼ばれるものに関係しています。とはいえ、この用語は私たちのパターン マッチング エンジンの機能とともに成長してきたので、ここで言語の必要性と戦おうとするつもりはありません。ただし、私は一般的にそれらを「正規表現」(または、私がアングロサクソン気分のときは「正規表現」) と呼びます。

      — Perl6 Apocalypse 5: パターン マッチング、ラリー ウォール著

そこには新しい構文がたくさんあるので、次から始めてゆっくりと見ていきましょう。

    $file = rx/ ^  <$hunk>*  $ /;

このステートメントは、パターン オブジェクトを作成します。または、Perl 6 で知られているように、「ルール」です。人々はおそらくそれらを「正規表現」または「正規表現」とも呼びますが (キーワードrxはそれを反映しています)、Perl パターンはずっと前に「正規」のようなものではなくなったので、それらの用語を避けるようにします。

[更新: これらのパターン全般を指す用語「正規表現」を復活させました。ここで「ルール」と言うときは、特に文法で使用する正規表現の種類を指しています。S05参照]

      — Perl6 Exegesis 5: パターン マッチング、Damian Conway 著

このドキュメントは、新しい正規表現構文に関する Apocalypse 5 をまとめたものです。 これらは長い間正規表現ではなかったので、現在は「正規表現」ではなく正規表現と呼ぼうとしています。一般的な「正規表現」という用語は、次の正確な意味を持つ専門用語になりつつあると考えています。 「正規表現のようなパターンマッチングを行うもの」. 一方、再設計の目的の 1 つは、パターンの一部を従来の正規表現とパーサー セマンティクスの下での分析により適したものにすることであり、これには、パターンと文法のどの部分を次のように扱うかを慎重に区別することが含まれます。宣言的であり、どの部分が手続き的であるか。

いずれにせよ、文法内の再帰パターンを参照するときは、通常、規則トークンという用語がregexよりも優先されます。

      — Perl6 Synopsis 5: Regexes and Rules、Damian Conway、Allison Randal、Patrick Michaud、Larry Wall、および Moritz Lenz 著

于 2011-05-25T18:49:18.107 に答える
4

O'Reilly の本'Mastering Regular Expressions'には、Perl およびその他のエンジンに関する非常に優れた説明があります。私にとって、これはトピックに関する参考書です。

于 2011-05-25T16:05:22.497 に答える
2

理論上のCSStackExchangeについて同じ質問をしましたが(正規表現はそうではありません)、最も多くの賛成を得た答えは「正規表現」でした。</ p>

于 2011-05-25T22:20:15.773 に答える
2

PCRE で受け入れられている言語には正式な数学的な名前はありません。

「バックトラッキングを伴う正規表現」または「後方参照を伴う正規表現」という用語は、あなたが得る限り近いものです。違いに精通している人なら誰でも、あなたが何を意味するかを理解できます。

(正規表現の実装には、DFA ベースとバックトラッキング ベースの 2 つの一般的なタイプしかありません。前者は一般に、従来のコンピューター サイエンスの意味での「通常の言語」を受け入れます。後者は、一般的に受け入れます。ただし、後方参照は常に非 DFA 機能の 1 つです)。

于 2011-05-25T16:14:20.987 に答える
-2
  • 方言は PCRE (Perl 互換の正規表現) と呼ばれます。
  • Perlのマニュアルに記載されています。
  • または、Wall、Orwant、Christiansen による「Programming Perl」
于 2011-05-25T15:32:04.547 に答える