PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHP 7のpreg_replace_callback_array()関数の使い方を解説

PHP 7で新たに導入されたpreg_replace_callback_array()関数は、複数の正規表現パターンそれぞれにコールバック関数を割り当てて、一括で置換処理を実行できる便利な関数です。従来はpreg_replace_callback()を複数回呼び出す必要がありましたが、この関数を使えば1回の呼び出しで済むため、コードがすっきりし、可読性も大幅に向上します。

この関数は、指定した正規表現のセットにマッチした文字列(または文字列の配列)に対して、対応するコールバック関数を使って置換を行い、その結果を返します。

構文

preg_replace_callback_array(patterns, input, limit, count)

パラメータ

  • patterns − 正規表現パターンをキー、コールバック関数を値とする連想配列を指定します。これにより、どのパターンにどのコールバックを適用するかを関連付けます。
  • input / subject − 置換処理の対象となる文字列、または文字列の配列を指定します。
  • limit − 省略可能なパラメータです。デフォルトは-1で、無制限を意味します。各文字列に対して実行できる置換の最大回数を設定します。
  • count − limitと同様に省略可能です。関数の実行完了後、実際に行われた置換の総回数がこの変数に格納されます。
  • flags − preg_offset_capture および preg_unmatched_as_null フラグの組み合わせを指定できます。これらのフラグは、マッチ結果の配列形式に影響を与えます。

戻り値

preg_replace_callback_array()は、置換後の文字列または文字列の配列を返します。エラーが発生した場合はnullを返します。また、マッチが見つかった場合には新しい文字列が返され、マッチが見つからなかった場合には元の文字列がそのまま返されます。

preg_replace_callback_array()の使用例

以下の例では、文字列「AaaaaaaBbbbCccc」に対して、a・b・cの連続にマッチする3つの正規表現パターンを、それぞれ独立したコールバック関数に関連付けています。各コールバック関数内ではstrlen()を使ってマッチした文字列の長さを取得し、出力しています。

<html>
<head>
<title>PHP 7 Feature tutorialpoint:</title>
</head>
<body>
<?php
    $subject = 'AaaaaaaBbbbCccc';
    preg_replace_callback_array (
        [
            '~[a]+~i' => function ($match) {
                echo strlen($match[0]), ' number of "a" found', PHP_EOL;
            },
            '~[b]+~i' => function ($match) {
                echo strlen($match[0]), ' number of "b" found', PHP_EOL;
            },
            '~[c]+~i' => function ($match) {
                echo strlen($match[0]), ' number of "c" found', PHP_EOL;
            }
        ],
        $subject
    );
?>
</body>
</html>

出力結果

上記プログラムの実行結果は以下の通りです。

7 number of "a" found
4 number of "b" found
5 number of "c" found

このように、preg_replace_callback_array()を使えば、パターンごとの処理をひとつの連想配列にまとめて記述できるため、複雑なテキスト処理もシンプルかつ効率的に実装できます。

  1. PHPのlog()関数とは?自然対数の計算方法と使い方を解説

    定義と使い方log() 関数は、数値の自然対数(natural logarithm)を計算します。対数とは、指数関数の逆演算のことです。たとえば 102=100 という関係は「log10100=2」と表せます。自然対数はオイラー数 e を底として計算され、PHP では定義済み定数 M_E によって e の値(2.7182818284590452354)が提供されています。具体例を挙げると、exp(4.60517018599)=100(つまり e4.60517018599=100)が成り立つため、loge100=4.60517018599 となります。PHP では、この自然対数(loge)を l

  2. PHPのlcg_value()関数とは?乱数生成の基本と使い方を解説

    lcg_value()関数の定義と使い方lcg_value()関数は、0から1までの範囲でランダムな数値(浮動小数点数)を生成するPHP組み込み関数です。「LCG」とは「線形合同法(Linear Congruential Generator)」の略称です。この手法は、不連続な区分線形方程式を用いて擬似乱数列を計算するアルゴリズムで、擬似乱数生成アルゴリズムの中でも最も古くから知られているものの一つです。構文lcg_value ( void ) : floatパラメータこの関数は引数を受け取りません。戻り値lcg_value()関数は、0.0以上1.0以下の範囲にある擬似乱数のfloat値を返し