ホームページ  >  記事  >  バックエンド開発  >  PHP のグローバル正規表現マッチングおよび配列要素のマッチング (詳細な例)

PHP のグローバル正規表現マッチングおよび配列要素のマッチング (詳細な例)

WBOY
WBOYオリジナル
2021-11-01 11:20:155715ブラウズ

前回の記事では、正規表現の一部を簡単に紹介した「PHPの刺激的な正規表現の基礎(詳細図解)」をご紹介しましたが、今回は基礎知識として引き続き紹介していきます。正規表現の一般的な機能をいくつか見てみましょう。皆さんのお役に立てれば幸いです。

PHP のグローバル正規表現マッチングおよび配列要素のマッチング (詳細な例)

前の記事では、正規表現の基本的な定義と、正規表現を使用した preg_match() 関数の基本的なアプリケーションを紹介しました。目的は、シンプルな方法で強力な機能を実現することです。シンプル、効果的、強力にするために、正規表現のルールは複雑であり、正しく効果的な正規表現を構築することはさらに困難であるため、preg_match() 関数を 1 つだけ使用するだけでは十分ではありません。

正規表現は、テキスト データを処理する場合に重要かつ複雑なテクノロジです。一部のテキスト エディタでは、正規表現を使用して高レベルの「検索/置換」機能を実装することもあります。より多くの関数を実装したい場合は、より多くの関数の知識が必要になるため、次に、正規表現に関する関数の知識をさらに見てみましょう。

<strong>#preg_match_all()<span style="font-size: 18px;"></span></strong><strong><span style="font-size: 18px;"></span></strong>##関数##preg_match()

関数の基本関数のみを紹介する前に、PHP には

preg_match() 関数によく似た関数もあります。 —preg_match_all()、この関数は、正規表現に一致する文字列内のすべての結果を検索できます。 この関数の構文形式は次のとおりです:

preg_match_all($pattern, $subject [, &$matches [, $flags = PREG_PATTERN_ORDER [, $offset = 0 ]]])

次の点に注意してください:

##$pattern
は、対象となるパターンを表します。定義された正規表現です。

$subject

は検索する文字列を示します。$matches は、オプションのパラメータがすべての一致を格納するために使用される多次元配列であることを示します配列は $flags Specify によって並べ替えられます。$offset はオプションのパラメーターを表し、$offset はターゲット文字列内の指定された位置から検索を開始するために使用されます。 、単位はバイトです。 ##$flags はオプションのパラメータを表し、次のタグと組み合わせて使用​​できます。

##PREG_PATTERN_ORDER

  • 結果は、$matches[0] は完全なパターンのすべての一致を保存し、$matches[1] は最初のサブグループのすべての一致を保存するというように並べ替えられます。 <strong></strong>

  • #PREG_SET_ORDER

  • 結果は、最初のものも含めて $matches[0] に並べ替えられます。 match 取得されたすべての一致 (サブグループを含む)、$matches[1] は 2 番目の一致で取得されたすべての一致 (サブグループを含む) を含む配列、などです。 <strong></strong>

    #PREG_OFFSET_CAPTURE

  • このタグが渡されると、見つかった一致が返されるたびに返される値が増加します。ターゲット文字列に対する相対的なオフセット。これにより、

    $matches 内の各一致結果文字列要素が変更され、0 番目の要素が一致結果文字列で、最初の要素が件名内の一致結果文字列のオフセットになる一致結果文字列になることに注意してください。 . シフト量。 <strong></strong>PREG_PATTERN_ORDER

  • PREG_SET_ORDER
を同時に使用することはできません。preg_match_all() 関数は、$pattern の一致数 (おそらく 0) を返し、 ## エラーが発生した場合は #FALSE

次に、文字列を照合する例を通じて preg_match_all() 関数の応用を見てみましょう。例は次のとおりです:

<?php
    $subject = "abcdefghijkdefabcedfdefxyzdef";
    $pattern_1 = &#39;/(def)(abc)/&#39;;
    $num_1 = preg_match_all($pattern_1, $subject, $matches_1,PREG_PATTERN_ORDER);
    echo "<pre class="brush:php;toolbar:false">";
    var_dump($matches_1);
    var_dump($num_1);
    $pattern_2 = &#39;/(def)(abc)/&#39;;
    $num_2 = preg_match_all($pattern_2, $subject, $matches_2,PREG_OFFSET_CAPTURE, 3);
    var_dump($matches_2);
    var_dump($num_2);
?>

出力結果: 上記の例では、 preg_match_all() 関数による文字列のマッチングが完了しました。グローバル正規表現マッチングは、preg_match_all() 関数を適用することで完了できます。

次に、指定されたパターンに一致する配列要素を検出する方法を見てみましょう。これは、preg_grep() 関数が使用される場合です。

preg_grep() PHP のグローバル正規表現マッチングおよび配列要素のマッチング (詳細な例)

関数

<strong>正規表現を使用します。文字列の一致に加えて、配列内の要素の一致も可能です。 PHP の preg_grep() 関数は、配列内のすべての要素を検索し、正規表現に一致するすべての要素の配列を返すことができます。この関数の構文形式は次のとおりです。 <span style="font-size: 18px;"><pre class="brush:php;toolbar:false">preg_grep($pattern, $input [, $flags = 0 ])</pre></span> 注意すべき点は次のとおりです。 </strong>

$pattern表示要搜索的模式,也就是定义好的正则表达式;$input表示要搜索的数组;$flags表示可选参数,可以设置为 PREG_GREP_INVERT,这时函数会返回数组中与给定模式 $pattern 不匹配的元素组成的数组。perg_grep() 函数将遍历 $input 数组中的每一个元素,让该元素与模式 $pattern 进行匹配,然后将匹配成功或者匹配失败的元素返回。

接下来,我们通过示例来看一下使用 perg_grep() 函数匹配数组中的元素,示例如下:

<?php
    $test_arr = array(
        &#39;PHP中文网&#39;,
        &#39;http://www.php.cn/&#39;,
        &#39;php教程&#39;,
        &#39;abcdefg&#39;
    );
    $preg = &#39;/^[a-z]/&#39;;
    $preg_arr_1 = preg_grep($preg, $test_arr);
    $preg_arr_2 = preg_grep($preg, $test_arr, PREG_GREP_INVERT);
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    var_dump($preg_arr_1);
    var_dump($preg_arr_2);
?>

输出结果:

PHP のグローバル正規表現マッチングおよび配列要素のマッチング (詳細な例)

上述示例便是通过preg_grep() 函数匹配数组中的元素。

大家如果感兴趣的话,可以点击《PHP视频教程》、《正则表达式手册》进行更多关于PHP和正则表达式知识的学习。

以上がPHP のグローバル正規表現マッチングおよび配列要素のマッチング (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。