【PHP】これで分かる関数! – 正規表現・オプション –

PHP

更新履歴

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

はじめに

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

後置オプション

後置オプションは正規表現のパターンの最後に付ける1オプションです。
後置オプションをつけることで正規表現の判定条件、動作を変更できます。

後置オプションには次の種類があります。

後置オプション説明
/regexp/i大文字/小文字を区別しないマッチを行う
/regexp/sピリオド(.)を改行(\n)も含めた任意の文字にマッチする
/regexp/xパターンから空白文字やコメントを削除する
/regexp/mキャレット(^)は改行の直後、ドル記号($)は改行の直前文字にマッチする
/regexp/e置換文字にPHPのコードを指定するとそのコードをeval()関数で
処理した結果に置き換える
/regexp/U量指定子のデフォルトの挙動から貪欲さをなくす
/regexp/uパターン文字列をUTF-8として扱う
/regexp/X\の後に特別な意味を持たない文字が続いている場合、
エラーを発生させる
/regexp/Aパターンの最初の文字が^であるかのように、文字列の先頭に
アンカーを設定する
/regexp/D$を行末のみにマッチさせるようにする
/regexp/Sパターンの構造をより慎重に解析し、ループ内などでの次回以降の
実行速度を少し高速にする

サンプルプログラム

後置オプションを使用したサンプルプログラムです。
サンプルプログラムはよく使用するiオプションを使用しています。

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

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現:後置オプション<br>\n";

    // 後置オプションのiを使用する
    $str1 = "Mike have a black dog.\n";
    $match = "/mike/i";
    echo "検索対象文字列:" . $str1. ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "正規表現の検索結果:" . preg_match($match, $str1, $hits) . ":<br>\n";
    echo "マッチした文字列の配列<br>\n";
    echo_array1($hits);

    // 後置オプションのiを使用しない
    $str1 = "Mike have a black dog.\n";
    $match = "/mike/";
    echo "検索対象文字列:" . $str1. ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "正規表現の検索結果:" . preg_match($match, $str1, $hits) . ":<br>\n";
    echo "マッチした文字列の配列<br>\n";

    if(empty($hits)) {
        echo "正規表現にマッチした文字列は存在しません<br>\n";
    } else {
        echo_array1($hits);
    }
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_06_16.php<br>
【PHP】正規表現:後置オプション<br>
検索対象文字列:Mike have a black dog.
:<br>
正規表現:/mike/i:<br>
正規表現の検索結果:1:<br>
マッチした文字列の配列<br>
[0]:Mike:<br><br>
検索対象文字列:Mike have a black dog.
:<br>
正規表現:/mike/:<br>
正規表現の検索結果:0:<br>
マッチした文字列の配列<br>
正規表現にマッチした文字列は存在しません<br>

インラインオプション

インラインオプションは次のように指定することでパターンの一部に適用することができます。

(?flags:subpattern)

このパターンで適用できるオプションはi、m、s、U、x、Xです。
複数のオプションを同時に適用することもできます。

サンプルプログラム

インラインオプションを使用したサンプルプログラムです。

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

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現:インラインオプション<br>\n";

    // インラインオプションのiを使用
    $str1 = "Mike have a black dog.\n";
    $match = "/(?i:mike)/";
    echo "検索対象文字列:" . $str1. ":<br>\n";
    echo "正規表現:" . $match . ":<br>\n";
    echo "正規表現の検索結果:" . preg_match($match, $str1, $hits) . ":<br>\n";
    echo "マッチした文字列の配列<br>\n";
    echo_array1($hits);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_06_17.php<br>
【PHP】正規表現:インラインオプション<br>
検索対象文字列:Mike have a black dog.
:<br>
正規表現:/(?i:mike)/:<br>
正規表現の検索結果:1:<br>
マッチした文字列の配列<br>
[0]:Mike:<br><br>

コメント