【PHP】これで分かる関数! – 正規表現関数その1 –

PHP

更新履歴

更新日更新者更新内容
2021/8/21JJI・”はじめに”の段落を追加
・サンプルプログラムの実行結果に画面の画像を追加

はじめに

サンプルプログラムの中で次の記事で載せている関数を使用している場合があります。

preg_filter

preg_filter()関数のサンプルプログラムです。
preg_filter()関数はpreg_replace()関数と同じように正規表現で文字列を置換しますが、preg_filter()関数は置換できない場合、戻り値はnull、preg_replace()関数の場合、戻り値は置換前の文字列が返却される違いがあります。

サンプルプログラム1

シングルバイト文字を検索対象としたサンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現関数:preg_filter<br>\n";

    // 検索対象文字列
    $str1 = "Mike have a black dog.";
    $str2 = "Mary have a pink cat.";

    // 置換に成功した場合
    $match = "/dog/";
    echo "検索対象文字列:" . $str1 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    $result = preg_filter($match, "cat", $str1);    
    echo "置換結果:"  . $result . ":<br>\n";
    echo "<br>\n";

    // 置換対象が存在しない場合、nullが返却される
    $match = "/dog/";
    echo "検索対象文字列:" . $str2 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    $result = preg_filter($match, "rabbit", $str2);
    echo "置換結果:"  . $result . ":<br>\n";
    echo "<br>\n";

    // 配列の置換
    echo "配列の置換:<br>\n";
    $results = preg_filter(["/dog/", "/cat/"], ["bear", "rabbit"], [$str1, $str2]);
    echo_array1($results);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_06_21.php<br>
【PHP】正規表現関数:preg_filter<br>
検索対象文字列:Mike have a black dog.:<br>
正規表現:/dog/:<br>
置換結果:Mike have a black cat.:<br>
<br>
検索対象文字列:Mary have a pink cat.:<br>
正規表現:/dog/:<br>
置換結果::<br>
<br>
配列の置換:<br>
[0]:Mike have a black bear.: [1]:Mary have a pink rabbit.:<br><br>

サンプルプログラム2

マルチバイト文字を検索対象としたサンプルプログラムです。
preg_filter()関数はマルチバイト文字でも正しく処理できます。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現関数:preg_filter マルチバイト文字列<br>\n";

    // 検索対象文字列
    $str1 = "マイク have a black イヌ.";
    $str2 = "メアリー have a 桃色 ネコ.";

    // 検索対象の配列
    $ary1 = [$str1, $str2];

    // マルチバイトの置換
    $match = "/イヌ/";
    echo "検索対象文字列:" . $str1 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    $result = preg_filter($match, "猫", $str1);    
    echo "置換結果:"  . $result . ":<br>\n";
    echo "<br>\n";

    // マルチバイトの置換
    $match = "/桃色/";
    echo "検索対象文字列:" . $str2 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    $result = preg_filter($match, "pink", $str2);    
    echo "置換結果:"  . $result . ":<br>\n";
    echo "<br>\n";
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_06_22.php<br>
【PHP】正規表現関数:preg_filter マルチバイト文字列<br>
検索対象文字列:マイク have a black イヌ.:<br>
正規表現:/イヌ/:<br>
置換結果:マイク have a black 猫.:<br>
<br>
検索対象文字列:メアリー have a 桃色 ネコ.:<br>
正規表現:/桃色/:<br>
置換結果:メアリー have a pink ネコ.:<br>
<br>

参考

preg_filter()関数についてもっと詳しいことを知りたい方は次のPHPマニュアルを見てください。

PHP: preg_filter - Manual

preg_grep

preg_grep()関数を使用したサンプルプログラムについて紹介します。
preg_grep()関数はマルチバイト文字でも正しく処理できます。

サンプルプログラム

サンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現関数:preg_grep<br>\n";

    // 検索対象文字列の配列
    $ary1 = [
        "Mike have a black dog.",
        "Mary have a white cat.",
        "Nick have a pink cat.",
        "Kate have a brawn cute dog."
    ];

    $ary2 = [
        "マイク have a black イヌ.",
        "メアリー have a white ネコ.",
        "ニック have a pink ネコ.",
        "ケイト have a brawn かわいい イヌ."
    ];

    // 検索1
    $match = "/dog/";
    $results = preg_grep($match, $ary1);    
    echo_array1($results);

    $match = "/ネコ/";
    $results = preg_grep($match, $ary2);    
    echo_array1($results);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_06_23.php<br>
【PHP】正規表現関数:preg_grep<br>
[0]:Mike have a black dog.: [3]:Kate have a brawn cute dog.:<br><br>
[1]:メアリー have a white ネコ.: [2]:ニック have a pink ネコ.:<br><br>

コメント