PHPの正規表現エンジンとチェックツール5選
PHPの正規表現の内容に入る前に簡単におさらいします。PHPとは、動的なウェブページを作成することを目的としたWebのプログラミング言語であり、Web系サーバーサイド言語です。日本ではJavaに次いで人気の高いプログラミング言語になります。
このPHPの「正規表現」についてご紹介していきます。
PHPの正規表現エンジンとチェックツール5選
PHPの正規表現の内容に入る前に簡単におさらいします。PHPとは、動的なウェブページを作成することを目的としたWebのプログラミング言語であり、Web系サーバーサイド言語です。日本ではJavaに次いで人気の高いプログラミング言語になります。今回は、このPHPの「正規表現」についてご紹介していきます。
【目次】
■PHPの正規表現の基礎
◆正規表現とは
◆文字クラスとは
◆基本的な正規表現「マッチング」
◆PHPの正規表現の種類
■PHPの正規表現の基本的文字一覧
◆メタ文字とは
◆PHPで使用する基本的なメタ文字
◆正規表現関数
■PHPの正規表現の使い方
◆手軽にPHPの正規表現をチェックできるツール5選
PHPの正規表現の基礎
正規表現とは
正規表現とは、文字列の集合を一つの文字列で表現する方法です。元々は形式言語理論において正規言語を表すための手段として導入されておりましたが、その後、様々な記法が付け加えられています。少し前まではテキストエディタやツールで使用されていましたが、現在の正規表現はほとんどスクリプト言語で使用しています。
文字クラスとは
正規表現を作成する時に対象になる文字パターンを指定する「文字クラス」というものが存在します。この文字クラスは、自分で定義することが出来るうえ、定義済みの文字クラスを使うことも出来ます。文字クラスの使い方は、クラスは[角カッコ]内で指定します。
また、文字クラスは[各カッコ]を使用せず省略して記述することも可能です。下記に一部ご紹介します。
| 文字クラス | 意味 | 略記法 |
| [0-9] | 数字 | d |
| [^0-9] | 数字以外の文字 | D |
| [ trn] | スペース | s |
| [^ trn] | スペース以外の文字 | S |
| [A-Z] | 任意の大文字 | u |
| [^A-Z] | 任意の大文字以外 | U |
| [a-z] | 任意の小文字 | l |
| [^a-z] | 任意の小文字以外 | L |
基本的な正規表現「マッチング」
特定のパターンを持っているか調べる正規表現で「マッチング」というものがあります。これはPHPだけではなく、他のプログラミング言語の正規表現でも使います。
このマッチングは4つのパターンがあります。
・文字列の先頭から調べる
・文字列の先頭から調べた位置でマッチしなかった場合は、次の文字に移動して再調査
・途中でマッチした場合は、その位置でマッチングを終える
・マッチするものがない場合は、文字列を最後まで調べて終わる
上記の通り、基本的には左側から始まりマッチングした時点で終了します。
PHPではなくRubyですが、別コラムでマッチングの動きを画像で解説しておりますので、ご参照ください。
PHPの正規表現の種類
PHPには、正規表現の文法を解釈し、パターンマッチングを行うための処理プログラム用のエンジンが用意されています。
POSIX
POSIXは、拡張正規表現を扱う正規表現エンジンで、扱う関数は「ereg」で始まります。ただし、セキュリティが弱くPHP5.3以降で非推奨のためおすすめできません。
PCRE
PCREは、Perl互換の正規表現エンジンで、扱う関数は「preg」で始まります。
mbregex
mbregexは、Rubyの「鬼車」という正規表現エンジンですがPHPでも使用出来ます。扱う関数は「mb」で始まります。
PHPの正規表現の基本的文字一覧

メタ文字とは
正規表現の中に良く出てくる「メタ文字」とは何でしょうか。メタ文字とは、文字本来の意味とは異なり、プログラムで特別な意味を持たせた文字のことを指します。例えばですが、正規表現で使用される1回以上の連続文字を意味するメタ文字は「+」です。これは本来の足すという意味ではなく連続を意味します。メタ文字で1+1と表示されていた場合は、11、111、1111などに一致します。
メタ文字は、環境や機能の中で任意に意味が決められているため、環境に応じて使用するメタ文字は何を意味するのか把握しておく必要があります。今回は、Rubyの正規表現で使用する基本的なメタ文字をご紹介します。
(引用:Rubyの正規表現の基礎知識と基本的なメタ文字一覧)
PHPで使用する基本的なメタ文字
| メタ文字 | 意味 |
| ^ | 行頭にマッチ |
| $ | 行末にマッチ |
| . | 改行を除いた任意の1文字 |
| ? | 0もしくは1回だけの文字 |
| * | 直前の表現に0回以上連続する文字 |
| + | 直前の表現に1回以上連続する文字 |
| [ ] | 文字クラス |
| ( ) | パターングループ |
| { } | 量指定子 |
| | | or |
| n | 改行 |
| r | カーソルを文頭へ戻す(キャリッジリターン) |
| t | タブ |
| d | 数字 |
| D | 数字以外 |
| w | 英数字 |
| W | 英数字以外 |
| s | スペース |
| S | スペース以外 |
| b | 単語境界線 |
| B | 単語境界線以外 |
| x?? | 16進数 |
| エスケープ文字 | |
| - | 文字範囲の指定 |
正規表現関数
POSIX関数
| 関数 | 意味 |
| ereg | 正規表現によるマッチング |
| ereg_replace | 正規表現による置換 |
| eregi | 大文字小文字を区別せずに正規表現による置換 |
| eregi_replace | 大文字小文字を区別せずに正規表現によるマッチング |
| split | 正規表現によって分割して文字列を配列に格納 |
| spliti | 大文字小文字を区別せずに正規表現によって 分割して文字列を配列に格納 |
| sql_regcase | 大文字小文字を区別せずにマッチングのための正規表現を作成 |
PCRE関数
| 関数 | 意味 |
| preg_filter | 正規表現による検索・置換 |
| preg_grep | パターンにマッチする要素を返す |
| preg_match | 正規表現によるマッチングをする |
| preg_quote | 正規表現の文字をクオートする |
| preg_replace | 正規表現検索と置換を行う |
| preg_split | 正規表現で文字列を分割する |
| preg_last_error | 直前の PCRE 正規表現処理のエラーコードを返す |
| preg_match_all | 繰り返し正規表現検索をする |
| preg_replace_callback_array | 正規表現検索をし、コールバック関数を使用して置換える |
mbregex関数
| 関数 | 意味 |
| mb_ereg_match | マルチバイト文字列が正規表現に一致するか調べる |
| mb_ereg_search | 指定したマルチバイト文字列が正規表現に一致するか調べる |
| mb_eregi_replace | マルチバイト文字列に大文字小文字を区別せずに正規表現による置換をする |
| mb_ereg_search_pos | 指定したマルチバイト文字列が正規表現に一致する個所の位置と長さを返す |
| mb_ereg_search_init | マルチバイト正規表現検索用の文字列と正規表現を設定 |
| mb_ereg_search_regs | 指定したマルチバイト文字列が正規表現に一致する部分を取得 |
(参照:PHPマニュアル)
PHPの正規表現の使い方
正規表現で出来る事は、主に文字列で「調べる」「抜き出す」「置き換える」の3つです。
PHPには正規表現のリテラルがありませんので、正規表現パターンは文字列として記述します。そのため「'」で囲みますが、間違えて「"」にしてしまうと、変数展開される場合がありますのでご注意下さい。「'」をリテラルとする場合のエスケープは「」になります。それ以外の場所で使用する「」は、全て「」そのものとして扱われます。
ただし、正規表現では「」はメタ文字として扱われるため、「」でエスケープする必要があります。そうなると、「」にマッチする正規表現の場合は「」と4つ並べる必要があります。最初はややこしくてわかり難いですが、覚えてしまえばすぐに慣れます。
【正規表現の例が載っているサイト】
・PHPマニュアル/ PCRE のパターン
・PHPマニュアル/ POSIX Regex正規表現の例
・PHPのpreg_matchで正規表現によるマッチングする方法
・TRY PHP/正規表現サンプルコード
・正規表現サンプル12選
手軽にPHPの正規表現をチェックできるツール5選
・正規表現チェッカー
PHPとJavaScriptの正規表現を記述する際の動作チェックなどに使用出来ます。正規表現と対象になる文字列を入力することで実行結果が確認出来ます。
・PHP正規表現チェッカー
PHP専用の正規チェックを行うツールです。「preg_match」「preg_match_all」「preg_replace」「preg_split」の4つを確認出来ます。
・正規表現デバッグツール ? LANDHERE
PHPのPCRE(preg)系の正規表現を確認するツールです。「preg_match」「preg_match_all」の処理結果を確認出来ます。
・Rex V
PHPのPCRE、POSIXはもちろん、PerlやPythton、JavaScript、Node.JSの正規表現をこのツール1つで確認することが出来ます。
・PHP Live Regex
PHPの正規表現をリアルタイムに動作確認出来るツールです。「preg_match」「preg_match_all」「preg_replace」の3つを確認することが出来ます。