正規表現 基礎編
preg_matchを使った基礎の正規表現
基本の正規表現
PHP
// fooが含まれていれば、TRUE
preg_match('/foo/', $str);
// fooで始まる場合、TRUE 前方一致
preg_match('/^foo/', $str);
// fooで終わる場合、TRUE 後方一致
preg_match('/foo\z/', $str);
// fooに一致した場合、TRUE 完全一致
preg_match('/^foo\z/', $str);
// 空の場合、TRUE
preg_match('/^\z/', $str);
// foobarまたはfoobazの場合、TRUE
preg_match('/^foo(bar|baz)\z/', $str);
// foまたはfooの場合、TRUE ?:直前の表現が0コか1コ
preg_match('/^foo?\z/', $str);
// fooa、foob、foocなどの場合、TRUE .:任意の1文字
preg_match('/^foo.\z/', $str);
// foo、fooa、fooabなどの場合、TRUE *:直前の表現が0コ以上
preg_match('/^foo.*\z/', $str);
// foo、foofoo、foofoofooなどの場合、TRUE
preg_match('/^(foo).*\z/', $str);
// fooa、fooabなどの場合、TRUE +:直前の表現が1コ以上
preg_match('/^foo.+\z/', $str);
// foofoo、foofoofooなどの場合、TRUE
preg_match('/^(foo).+\z/', $str);
// fooとbarが含まれる場合、TRUE
preg_match('/(?=.*foo)(?=.*bar)/', $str);
// fooとbarとbazが含まれる場合、TRUE
preg_match('/(?=.*foo)(?=.*bar)(?=.*baz)/', $str);
// 肯定先読み fooの後がbarの場合、TRUE
preg_match('/foo(?=bar)/', $str);
// 否定先読み fooの後がbar以外の場合、TRUE
preg_match('/foo(?!bar)/', $str);
// 肯定後読み fooの前がbarの場合、TRUE
preg_match('/(?<=bar)foo/', $str);
// 否定後読み fooの前がbar以外の場合、TRUE
preg_match('/(?<!bar)foo/', $str);
// 英小文字1文字の場合、TRUE
preg_match('/^[a-z]\z/', $str);
// 英小文字2文字の場合、TRUE
preg_match('/^[a-z]{2}\z/', $str);
// 英小文字2文字または3文字の場合、TRUE
preg_match('/^[a-z]{2,3}\z/', $str);
// 英小文字2文字以上4文字以下の場合、TRUE
preg_match('/^[a-z]{2,4}\z/', $str);
// 英小文字2文字以上の場合、TRUE
preg_match('/^[a-z]{2,}\z/', $str);
// 全角英小文字の場合、TRUE
preg_match('/^[a-z]+\z/', $str);
// 英大文字の場合、TRUE
preg_match('/^[A-Z]+\z/', $str);
// 全角英大文字の場合、TRUE
preg_match('/^[A-Z]+\z/', $str);
// 数字の場合、TRUE
preg_match('/^[0-9]+\z/', $str);
preg_match('/^\d+\z/', $str);
// 数字以外の場合、TRUE
preg_match('/[^0-9]/', $str);
preg_match('/^\D+\z/', $str);
// 全角数字の場合、TRUE
preg_match('/^[0-9]+\z/', $str);
// 英数字の場合、TRUE
preg_match('/^[A-Za-z0-9]+\z/', $str);
preg_match('/^[a-z0-9]+\z/i', $str);
// 記号の場合、TRUE
preg_match('/^[\x21-\x2e|\/|:-@|[-`|{-~]+\z/', $str);
// 英数字記号の場合、TRUE
preg_match('/^[\x21-\x7e]+\z/', $str);
// 英数字アンダースコアの場合、TRUE
preg_match('/^\w+\z/', $str);
// 英数字混在 a1や2bなどの場合、TRUE
preg_match('/^(?=.*[a-z])(?=.*[0-9])[a-z0-9]+\z/i', $str);
// 整数の場合、0~はTRUE
preg_match('/^(0|[1-9]\d*)\z/', $str);
// 小数の場合、0.1 0.10 1.0 1.00はTRUE 0.0 0.00はFALSE
preg_match('/^(0\.(?!0*\z)\d+|[1-9]\d*\.\d+)\z/', $str);
// 小数第3位まで
preg_match('/^(0\.(?!0*\z)\d{1,3}|[1-9]\d*\.\d{1,3})\z/', $str);
// 整数または小数の場合、TRUE
preg_match('/^(0(\.(?!0*\z)\d+)?|[1-9]\d*(\.\d+)?)\z/', $str);
// マイナスを含む場合 -0はFALSE
preg_match('/^(0|-?0\.(?!0*\z)\d+|-?[1-9]\d*(\.\d+)?)\z/', $str);
// 16進数3文字または6文字 a1bやa1b2c3などの場合、TRUE
preg_match('/^([0-9a-f]{3}){1,2}\z/i', $str);
// 全角ひらがな(ぁ~んとー)
// SJIS
preg_match('/^(\x82[\x9f-\xf1]|\x81\x5b)+\z/', $str);
// EUC
preg_match('/^(\xa4[\xa1-\xf3]|\xa1\xbc)+\z/', $str);
// UTF-8
preg_match('/^(\xe3(\x81[\x81-\xbf]|\x82[\x80-\x93|\xbc]))+\z/', $str);
// 全角カタカナ(ァ~ヶとー)
// SJIS
preg_match('/^(\x83[\x40-\x96]|\x81\x5b)+\z/', $str);
// EUC
preg_match('/^(\xa5[\xa1-\xf6]|\xa1\xbc)+\z/', $str);
// UTF-8
preg_match('/^(\xe3(\x82[\xa1-\xbf]|\x83[\x80-\xb6|\xbc]))+\z/', $str);
// 空白文字の場合、TRUE
preg_match('/^[\s]+\z/', $str);
// スペースを含む(SPACE, NO-BREAK SPACE, EN SPACE, EM SPACE, THREE-PER-EM SPACE, FOUR-PER-EM SPACE, SIX-PER-EM SPACE, FIGURE SPACE, PUNCTUATION SPACE, THIN SPACE, HAIR SPACE, IDEOGRAPHIC SPACE, CHARACTER TABULATION)
preg_match('/(\x20|\xc2\xa0|\xe2\x80[\x82-\x8a]|\xe3\x80\x80|\x09)/', $str);
// ゼロ幅スペースを含む(ZERO WIDTH SPACE, ZERO WIDTH NO-BREAK SPACE)
preg_match('/(\xe2\x80\x8b|\xef\xbb\xbf)/', $str);
// 制御文字を含む
preg_match('/[\x00-\x1f\x7f]/', $str);
// 制御文字(改行コード除外)
preg_match('/[\x00-\x09\x0B\x0C\x0E-\x1f\x7f]/', $str);
// スラッシュが含まれている場合、TRUE バックスラッシュでエスケープ
preg_match('/\//', $str);
パターン修飾子
PHP
// i
// fooまたはFOOが含まれていれば、TRUE 大小区別しない
preg_match('/foo/i', $str);
// m
// 改行後または文始がfooで始まる、bar\nfooやfooなどの場合、TRUE
preg_match('/^foo/m', $str);
// 改行前または文末がfooで終わる、foo\nhogeやfooなどの場合、TRUE
preg_match('/foo$/m', $str);
// s
// ドットメタ文字が改行を含む全ての文字にマッチ、foo\n、fooa、fooabなどの場合、TRUE
preg_match('/^foo.+$/s', $str);
// x
// 空白文字を無視、fooの場合、TRUE
preg_match('/^foo $/x', $str);
// A
// 文字列の最初を強制マッチ
// fooが含まれていればマッチ
preg_match('/foo/', '<foo><bar><baz>', $match);
// 文始がfooで始まればマッチ
preg_match('/foo/A', '<foo><bar><baz>', $match);
// U
// <foo><bar><baz>がマッチ
preg_match('/(<.*>)/', '<foo><bar><baz>', $match);
// <foo>がマッチ
preg_match('/(<.*>)/U', '<foo><bar><baz>', $match);