正規表現マニュアル

リーディング(27704) 更新時間(2022-04-13)

正規表現。正規表現とも呼ばれます。 (英語: Regular Expression、コード内では regex、regexp、または RE と略されることがよくあります)、コンピューター サイエンスの概念。通常のテーブルは、特定のパターン (ルール) に一致するテキストを取得および置換するために使用されます。


正規表現は、文字列操作のための論理式です。正規表現は、いくつかの事前定義された特定の文字とこれらの特定の文字の組み合わせを使用して、「ルール文字列」を形成します。この「ルール文字列」は、文字列のフィルタリング ロジックを表現するために使用されます。

多くのプログラミング言語は、正規表現を使用した文字列操作をサポートしています。たとえば、Perl には強力な正規表現エンジンが組み込まれています。正規表現の概念は、もともと Unix のツール ソフトウェア (sed や grep など) によって普及しました。正規表現は「regex」と略されることが多く、単数形には regexp、regex が含まれ、複数形には regexps、regexes、regexen が含まれます。

最初の正規表現の例!

インスタンス

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP中文网教程(php.sn)</title>
</head>
<body>

<script>
var str = "abc123def";
var patt1 = /[0-9]+/;
document.write(str.match(patt1));
</script>

</body>
</html>

インスタンスの実行 »

[インスタンスの実行]ボタンをクリックして、オンライン インスタンスを表示します

ヒント: 正規表現チュートリアルは、初心者から上級者まで正規表現の知識を学ぶのに役立ちます。ご質問がある場合は、PHP 中国語 Web サイト 正規表現コミュニティ にアクセスして質問してください。熱心なネチズンが答えてくれます。

正規表現機能

  • 非常に柔軟、論理的かつ機能的;

  • 複雑な制御を迅速に実現非常に簡単な方法で文字列を取得します。

  • 初めての方にとっては、これは比較的わかりにくいかもしれません。

正規表現の主なアプリケーションオブジェクトはテキストであるため、有名なエディタEditPlusからMicrosoft Word、Visual Studioなどに至るまで、さまざまなテキストエディタで使用されています。テキストコンテンツを処理するための正規表現。

目的

正規表現と別の文字列を指定すると、次の目的を達成できます:

  • 指定された文字列が正規に準拠しているかどうかフィルタリング ロジック式 (「マッチング」と呼ばれます)

  • では、正規表現を使用して、文字列から必要な特定の部分を取得できます。

通常のエンジン

通常のエンジンは主に 2 つのカテゴリに分類できます。

  • 1 つは DFA、

  • #1 つは NFA です。

どちらのエンジンも長い歴史(20年以上)があり、バリエーションも豊富です!したがって、POSIX の導入により、不要なバリアントが継続的に生成されることが回避されます。このように、主流の通常エンジンは、1. DFA、2. 従来の NFA、3. POSIX NFA の 3 つのカテゴリに分類されます。

DFA エンジンはバックトラッキングを必要としないため、線形時間状態で実行されます (したがって、同じ文字を 2 回テストすることはありません)。また、DFA エンジンは、可能な限り長い文字列が一致することを保証します。ただし、DFA エンジンには限られた状態しか含まれていないため、後方参照を使用してパターンを照合することはできず、明示的な展開を構築しないため、部分式をキャプチャすることもできません。

従来の NFA エンジンは、指定された順序で正規表現のすべての可能な展開をテストし、最初の一致を受け入れる、いわゆる「貪欲な」一致バックトラッキング アルゴリズムを実行します。従来の NFA は正規表現の特定の拡張を構築して一致を取得するため、部分式の一致と一致する後方参照の両方をキャプチャできます。ただし、従来の NFA はバックトラックするため、まったく同じ状態に複数回アクセスできます (異なるパス経由で到達した場合)。したがって、最悪の場合、動作が非常に遅くなる可能性があります。従来の NFA は最初に見つかった一致を受け入れるため、他の (おそらく長い) 一致が検出されない可能性もあります。

POSIX NFA エンジンは従来の NFA エンジンと似ていますが、可能な限り最長の一致が見つかるまでバックトラックを続ける点が異なります。したがって、POSIX NFA エンジンは従来の NFA エンジンよりも低速であり、POSIX NFA を使用する場合は、長い一致検索ではなく短い一致検索をサポートするためにルックバック検索の順序を変更したくないでしょう。

DFA エンジンを主に使用するプログラム:

awk,egrep,flex,lex,MySQL,Procmail等;

従来の NFA エンジンを主に使用するプログラム:

GNU Emacs,Java,ergp,less,more,.NET语言,PCRE library,Perl,PHP,Python,Ruby,sed,vi;

主に POSIX NFA エンジンを使用するプログラム以下が含まれます:

mawk,Mortice Kern Systems’ utilities,GNU Emacs(使用时可以明确指定);

DFA/NFA ハイブリッドを使用するエンジンもあります:

GNU awk,GNU grep/egrep,Tcl。

NFA と DFA の作業の違いを簡単に説明する例を挙げます:

たとえば、「this is yansen's blog」という文字列、正規表現があります。式は /ya(msen|nsen|nsem)/ です (式は気にしないでください。これはエンジン間の動作の違いを説明するためだけです)。 NFA は次のように機能します。まず、文字列内で y を検索し、その後に a が続くかどうかを照合します。a の場合は、引き続き m が続くかどうかを検索します。そうでない場合は、その後に n が続くかどうかを照合します ( msen 選択ブランチはこの時点で削除されます)。

次に、その後に s、e が続くかどうかを確認し、n であるかどうかをテストします。n であれば、一致は成功です。そうでない場合は、m であるかどうかをテストします。なぜm? NFA は正規表現に基づいて動作し、文字列を繰り返しテストするため、同じ文字列が何度もテストされる可能性があります。

これは DFA の場合には当てはまりません。DFA は、この中で t から始まる順序で y を検索し、y を見つけます。その後に a が続くことがわかっている場合は、式に a があるかどうかを確認し、たまたまここがあります。次に、文字列 a の後に n が続き、DFA は式を順番にテストします。この時点で、msen は要件を満たしていないため、削除されます。 nsen と nsem が要件を満たしているため、DFA は文字列を順番にチェックします。sen の n が検出されると、nsen ブランチのみが要件を満たし、一致は成功します。

2 つのエンジンはまったく異なる方法で動作していることがわかります。1 つ (NFA) は式指向で、もう 1 つ (DFA) はテキスト指向です。一般的に、DFA エンジンは検索が高速です。ただし、NFA は式指向で操作が簡単なため、ほとんどのプログラマーは NFA エンジンを好みます。どちらのエンジンにも独自の長所があり、実際の引用はニーズと使用する言語によって異なります。

この正規表現チュートリアル マニュアルの内容

この正規表現チュートリアルでは、正規表現の構文、正規表現のメタキャラクタ、正規表現、式演算子の優先順位、正規表現など、正規表現の基本および高度な知識をすべてカバーします。式一致ルールなど。

ヒント: このチュートリアルの各章には、多くの正規表現の例が含まれています。[例の実行] ボタンを直接クリックすると、結果をオンラインで表示できます。これらの例は、正規表現をより深く理解するのに役立ちます。

その他の正規表現関連の学習参照リソース

このページの右側にある知識の拡張に加えて、次のリソースもすべての人向けに選択されています