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

PHP

更新履歴

更新日更新者更新内容
2021/7/3JJI選択肢は別の記事を移動
サブパターンは記事を分割
2021/8/21JJI・”はじめに”の段落を追加
・サンプルプログラムの実行結果に画面の画像を追加

はじめに

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

デリミタ

正規表現の開始と終了は特定の文字列(デリミタ)で囲む必要があります。
デリミタは英数字、バックスラッシュ、空白文字以外の任意の文字が使用可能です。

よく使用する文字はスラッシュ (/)、 ハッシュ記号 (#)です。

具体例は次のサンプルプログラムを見てください。

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

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現:デリミタ文字<br>\n";

    // デリミタ文字に"/"を使用する
    $match = "/^0[7-9]0-\d{4}-\d{4}/";

    $str1 = "090-1234-5678";
    echo "$str1:" . preg_match($match, $str1) . ":<br>\n";

    $str1 = "090-123-5678";
    echo "$str1:" . preg_match($match, $str1) . ":<br>\n";

    // デリミタ文字に"#"を使用する
    $match = "#^/work/test1/#";

    $str1 = "/work/test1/aaa";
    echo "$str1:" . preg_match($match, $str1) . ":<br>\n";

    $str1 = "/work1/test/bbb";
    echo "$str1:" . preg_match($match, $str1) . ":<br>\n";
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_06_02.php<br>
【PHP】正規表現:デリミタ文字<br>
090-1234-5678:1:<br>
090-123-5678:0:<br>
/work/test1/aaa:1:<br>
/work1/test/bbb:0:<br>

メタ文字

正規表現が便利なのは、正規表現のパターン中に特定の文字に一致するパターン、繰り返しなどがたくさん存在することです。
この特定の文字に一致するパターン、繰り返しで使用する文字のことをメタ文字と呼んでいます。

メタ文字は非常に多いため、全て覚えることは難しいです。
メタ文字の種類を理解しておいて正規表現を使用する場合、PHPマニュアル等を見て使用できれば大丈夫です。

メタ文字の種類

メタ文字は次の種類があります。

種類説明
エスケープシーケンスエスケープシーケンスは\をつけることで特別な意味を持つ文字のこと
エスケープシーケンスの前にさらに\をつけることで通常の文字として扱える
アンカー文字列内の特定の場所を指定する
例)^は文字列の先頭、$は文字列の最後
選択肢パイプ記号(|)を使用すると正規表現内で選択肢を指定できる
繰り返し繰り返しのパターンは量指定子と呼ばれるものを使用する
例)?は0回あるいは1回、*は0回以上
サブパターン正規表現のパターンを()で囲むと括弧で囲った部分は
1つのパターンになる
文字クラス特定の文字を示すパターン、[]で囲む
文字クラスが準備されたものがある、独自に[]で囲って作ることもできる
例)[:alnum]:は半角英数字、[:alpha:]は半角英字
  [1-3]は1~3の半角数字、独自で作ったもの

PHPマニュアルではメタ文字・文字クラスはそれぞれ次のページに載っています。

PHP: メタ文字 - Manual
PHP: 文字クラス - Manual

エスケープシーケンス

エスケープシーケンスは次の記事を見てください。

アンカー

アンカーは次の記事を見てください。

繰り返し

繰り返しは次の記事を見てください。

選択肢

繰り返しは次の記事を見てください。

サブパターン

サブパターンは次の記事を見てください。

後置オプション

後置オプションは次の記事を見てください。

コメント