トップへ(mam-mam.net/)

PHPで正規表現を扱う

検索:

PHPで正規表現を扱う

PHPで正規表現を扱う時に特に注意しなければならないのは、文字列を括るシングルクォーテーションとダブルクォーテーションで標準エスケープ処理がされてしまうことです。
よってPHPでは以下を配慮して正規表現を記述する必要があります。(PHPで正規表現を扱う場合は標準エスケープ処理の少ないシングルクォーテーションの使用がお勧め)

シングルクォーテーション(')でエスケープ処理される文字一覧
エスケープシーケンス 文字
\' シングルクオーテーション(')
\\ バックスラッシュ(\)[Windowsでのエンマーク]

ダブルクォーテーション(")でエスケープ処理される文字一覧
エスケープシーケンス 文字
\" ダブルクオーテーション(")
\\ バックスラッシュ(\)[Windowsでのエン記号]
\$ ドル($)
\r 改行(0x0D)
\n ラインフィード(0x0A)[Linuxでの改行]
\t 水平タブ(0x09)
\t 垂直タブ(0x0B)
\e ESC(0x1B)[エスケープ]
\f フォームフィード(0x0C)
\x16進数2桁 16進数でASCII文字を表現
例えば
"\x4A\x61\x76\x61\x73\x63\x72\x69\x70\x74" は
「Javascript」です

正規表現一覧

メタ文字 意味 備考
^ 先頭にマッチ
(例)先頭「ab」にマッチしないので0を返す
preg_match('/^ab/', 'zabc');
(例)先頭「za」にマッチするので1を返す
preg_match('/^za/', "zabc");
(例)先頭「/za」にマッチするので1を返す
   正規表現でスラッシュ「/」を使うときはエスケープが必要
preg_match('/^\/za/', "/zabc");
$ 最後にマッチ
(例)最後「ab」にマッチしないので0を返す
preg_match('/ab$/', "zabc");
(例)最後「bc」にマッチするので1を返す
preg_match('/bc$/', "zabc");
. 任意の1文字
(例)「bcde」にマッチするので1を返す
preg_match('/b.de/', "abcdef")
(例)マッチしないので0を返す
preg_match('/a.de$/', "abcdef");
* 直前のパターンの0回以上繰り返し(最長一致)
(例)「bccc」にマッチするので1を返す
preg_match('/bc*/', "abccc");
*? 直前のパターンの0回以上繰り返し(最短一致)
(例) 「b」にマッチするので1を返す
preg_match('/bc*?/', "abccc");
+ 直前のパターンの1回以上繰り返し(最長一致)
(例)「bccc」にマッチするので1を返す
preg_match('/bc+/', "abccc");
+? 直前のパターンの1回以上繰り返し(最短一致)
(例)「bc」にマッチするので1を返す
preg_match('/bc+?/', "abccc");
? 直前のパターンの0~1回繰り返し(最長一致)
(例)「bc」にマッチするので1を返す
preg_match('/bc?/', "abccc");
?? 直前のパターンの0~1回繰り返し(最短一致)
(例)「b」にマッチするので1を返す
preg_match('/bc??/', "abccc");
| 又は
(例)「c」と「d」にマッチするので1を返す
preg_match('/c|d/', "abcdef");
(例)「ab」「de」にマッチするので1を返す
preg_match('/ab|de/', "abcdef");
[] []内の文字何れか [abc]は文字「abc」の何れか
[a-z]は文字「aからz」までの何れか
[c-g]は文字「cdefg」の何れか
[A-Z]は文字「AからZ」までの何れか
[0-9]は文字「0から9」までの何れか
[a-zA-Z0-9]は文字「aからz」「AからZ」「0から9」までの何れか
[ぁ-ん]は「ひらがな」の何れか
[ァ-ヴ]は「カタカナ」の何れか
[ヲ-゚]は「半角カタカナ」の何れか
(例)「def」にマッチするので1を返す
preg_match('/[bcd]ef/', "abcdef");
(例)「def」にマッチするので1を返す
preg_match('/[a-zA-Z0-9]ef/', "abcdef");
(例)マッチしないので0を返す
preg_match('/[0-9]ef/', "abcdef");
[^] []内に含まれない文字の何れか
(例)「bcde」にマッチするので1を返す
preg_match('/b[^xyz]de/', "abcdef");
(例)マッチしないので0を返す
preg_match('/[^a-zA-Z0-9]de/', "abcdef");
(例)「def」にマッチするので1を返す
preg_match('/[^0-9]ef/', "abcdef");
\n ラインフィーダ(LF)
Linuxでの改行文字
(例)「LF」にマッチするので1を返す
preg_match('/\n/', "abc\r\ndef");
\r キャリッジリターン(CR)
(例)「CR」「LF」(Windowsの改行)にマッチするので1を返す
preg_match('/\r\n/', "abc\r\ndef");
\文字 \(バックスラッシュ)の直後の文字をエスケープする
(例)「\」(バックスラッシュ)にマッチするので1を返す
preg_match('/\\\\/', "abc\\def");
\t タブ(0x09)
(例)「タブ」にマッチするので1を返す
preg_match('/\t/', "abc\tdef");
\s 半角スペース、\t、\n、\r、\f の何れか
(例)「タブ」「スペース」にマッチするので1を返す
preg_match('/\s+/', "abc\t def");
\S 半角スペース、\t、\n、\r、\f 以外
(例)「abc」と「def」にマッチするので1を返す
preg_match('/\S+/', "abc\t def");
\d 半角数字 [0-9]と同じ
(例)「c789」にマッチするので1を返す
preg_match('/c\d+/', "abc789def");
\D 半角数字以外の文字 [^0-9]と同じ
(例)マッチしないので0を返す
preg_match('/c\D+/', "abc789def");
\w 半角英数字とアンダースコア(_)
(例)「c789_dEF」にマッチするので1を返す
preg_match('/c\w+/', "abc789_dEF#");
\W 半角英数字とアンダースコア(_)以外の文字
(例)「c#」にマッチするので1を返す
preg_match('/c\W+/', "abc#DEF");
{num} 直前パターンのnum回繰り返し
(例)「cde」にマッチするので1を返す
preg_match('/[c-f]{3}/', "abcdefgh");
(例)郵便番号「654-0101」にマッチするので1を返す
preg_match('/^\d{3}-\d{4}$/', "654-0101");
{min,} 直前パターンのmin回以上の繰り返し(最長一致)
(例)「cdefff」にマッチするので1を返す
preg_match('/[c-f]{3,}/', "abcdefffgh");
{min,}? 直前パターンのmin回以上の繰り返し(最短一致)
(例)「cde」にマッチするので1を返す
preg_match('/[c-f]{3,}?/', "abcdefffgh");
{min,max} 直前パターンのmin回以上、max回以下の繰り返し(最長一致)
(例)「cdeff」にマッチするので1を返す
preg_match('/[c-f]{3,5}/', "abcdefffgh");
(例)年月日「2024/01/05」にマッチするので1を返す
preg_match('/^\d{4}\/\d{1,2}\/\d{1,2}$/', "2024/01/05");
{min,max}? 直前パターンのmin回以上、max回以下の繰り返し(最短一致)
(例)「cde」にマッチするので1を返す
preg_match('/[c-f]{3,5}?/', "abcdefffgh");