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

PHP

更新履歴

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

はじめに

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

preg_match_all

preg_match_all()関数を使用したサンプルプログラムです。
あまり使用することは多くないと思うので、参考程度で見てください。
マルチバイト文字の検索も可能です。

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

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

// 検索対象文字列
$str1 = <<< END
Mike have a black big dog.
Mary have a white small cat.
Nick have a glay dog.
Nancy have a brawn cat.
END;

// 検索対象文字列
$str2 = <<< END
Mike have a 黒い big イヌ.
Mary have a 白い small ネコ.
Nick have a グレー イヌ.
Nancy have a 茶色 ネコ.
END;

    // シングルバイト文字の検索
    $match = "/(glay|brawn)?\s(dog|cat)/";
    echo "検索対象文字列:" . preg_replace("/\n/" ,"\\n" ,$str1) . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "正規表現のマッチ結果:" . preg_match_all($match, $str1, $hits) . ":<br>\n";
    echo_array2($hits);

    // マルチバイト文字の検索
    $match = "/(グレー|茶色)?\s(イヌ|ネコ)/";
    echo "検索対象文字列:" . preg_replace("/\n/" ,"\\n" ,$str2) . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "正規表現のマッチ結果:" . preg_match_all($match, $str2, $hits) . ":<br>\n";
    echo_array2($hits);
    
    function echo_array2(array $ary) {
        for($i = 0; $i < count($ary); $i++) {
            for($j = 0; $j < count($ary[$i]); $j++){
                if($j !== 0) {
                    echo " ";
                }
                echo ":[$i][$j]:" . $ary[$i][$j] . ":";
            }
            echo "<br>\n";
        }
        echo "<br>\n";
    }
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_06_26.php<br>
【PHP】正規表現関数:preg_match_all<br>
検索対象文字列:Mike have a black big dog.
\nMary have a white small cat.
\nNick have a glay dog.
\nNancy have a brawn cat.:<br>
正規表現:/(glay|brawn)?\s(dog|cat)/:<br>
正規表現のマッチ結果:4:<br>
:[0][0]: dog: :[0][1]: cat: :[0][2]:glay dog: :[0][3]:brawn cat:<br>
:[1][0]:: :[1][1]:: :[1][2]:glay: :[1][3]:brawn:<br>
:[2][0]:dog: :[2][1]:cat: :[2][2]:dog: :[2][3]:cat:<br>
<br>
検索対象文字列:Mike have a 黒い big イヌ.
\nMary have a 白い small ネコ.
\nNick have a グレー イヌ.
\nNancy have a 茶色 ネコ.:<br>
正規表現:/(グレー|茶色)?\s(イヌ|ネコ)/:<br>
正規表現のマッチ結果:4:<br>
:[0][0]: イヌ: :[0][1]: ネコ: :[0][2]:グレー イヌ: :[0][3]:茶色 ネコ:<br>
:[1][0]:: :[1][1]:: :[1][2]:グレー: :[1][3]:茶色:<br>
:[2][0]:イヌ: :[2][1]:ネコ: :[2][2]:イヌ: :[2][3]:ネコ:<br>
<br>

preg_replace/mb_ereg_replace

preg_replace

preg_replace()関数を使用したサンプルプログラムです。

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

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

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

    // シングルバイト文字→シングルバイト文字の置換
    $match = "/black/";
    echo "検索対象文字列:" . $str1 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "置換結果:" . preg_replace($match, "white", $str1) . ":<br>\n";    
    echo "<br>\n";

    // シングルバイト文字→マルチバイト文字の置換
    $match = "/black/";
    echo "検索対象文字列:" . $str1 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "置換結果:" . preg_replace($match, "白い", $str1) . ":<br>\n";    
    echo "<br>\n";

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

    // 置換対象なし、そのままの文字列が返却される
    $match = "/white/";
    echo "検索対象文字列:" . $str1 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "置換結果:" . preg_replace($match, "白い", $str1) . ":<br>\n";    
    echo "<br>\n";
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_06_27.php<br>
【PHP】正規表現関数:preg_replace<br>
検索対象文字列:Mike have a black dog.:<br>
正規表現:/black/:<br>
置換結果:Mike have a white dog.:<br>
<br>
検索対象文字列:Mike have a black dog.:<br>
正規表現:/black/:<br>
置換結果:Mike have a 白い dog.:<br>
<br>
検索対象文字列:メアリー have a 桃色 ネコ.:<br>
正規表現:/桃色/:<br>
置換結果:メアリー have a pink ネコ.:<br>
<br>
検索対象文字列:メアリー have a 桃色 ネコ.:<br>
正規表現:/桃色/:<br>
置換結果:メアリー have a 白い ネコ.:<br>
<br>
検索対象文字列:Mike have a black dog.:<br>
正規表現:/white/:<br>
置換結果:Mike have a black dog.:<br>
<br>

mb_ereg_replace

mb_ereg_replace()関数を使用したサンプルプログラムです。

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

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

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

    // シングルバイト文字→シングルバイト文字の置換
    $match = "black";
    echo "検索対象文字列:" . $str1 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "置換結果:" . mb_ereg_replace($match, "white", $str1) . ":<br>\n";    
    echo "<br>\n";

    // シングルバイト文字→マルチバイト文字の置換
    $match = "black";
    echo "検索対象文字列:" . $str1 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "置換結果:" . mb_ereg_replace($match, "白い", $str1) . ":<br>\n";    
    echo "<br>\n";

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

    // 置換対象なし、そのままの文字列が返却される
    $match = "white";
    echo "検索対象文字列:" . $str1 . ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "置換結果:" . mb_ereg_replace($match, "白い", $str1) . ":<br>\n";    
    echo "<br>\n";
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_06_28.php<br>
【PHP】正規表現関数:mb_ereg_replace<br>
検索対象文字列:Mike have a black dog.:<br>
正規表現:black:<br>
置換結果:Mike have a white dog.:<br>
<br>
検索対象文字列:Mike have a black dog.:<br>
正規表現:black:<br>
置換結果:Mike have a 白い dog.:<br>
<br>
検索対象文字列:メアリー have a 桃色 ネコ.:<br>
正規表現:桃色:<br>
置換結果:メアリー have a pink ネコ.:<br>
<br>
検索対象文字列:メアリー have a 桃色 ネコ.:<br>
正規表現:桃色:<br>
置換結果:メアリー have a 白い ネコ.:<br>
<br>
検索対象文字列:Mike have a black dog.:<br>
正規表現:white:<br>
置換結果:Mike have a black dog.:<br>
<br>

コメント