preg_matchとは?
状態:-
閲覧数:1,771
投稿日:2018-07-23
更新日:2018-07-23
正規表現によるマッチングを行う関数
具体的には?
・正規表現のパターンにマッチすると「1」を返し、マッチしない場合は「0」を返し、エラー発生のときはFALSEを返す
・なお、preg_match は、文字列中に現れた最初のパターンのみを検出(そこで処理終了)する
構文
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
preg_match( 正規表現パターン , 検索する文字列 [, 検索結果 [, フラグ指定[, 検索の開始位置を (バイト単位で) 指定 ]]])
・第 1 引数 … 検索するパターンを表す文字列・第 2 引数 … 検索する文字列
・第 3 引数 … 検索結果。オプションなので省略可能
・第 4 引数 … フラグ指定。オプションなので省略可能
・第 5 引数 … 検索の開始位置を (バイト単位で) 指定。オプションなので省略可能
返り値
patternがマッチした回数を返す
・「0 回(マッチせず)または 1 回」
・これは、最初にマッチした時点でpreg_match()は検索を止めるため
・逆にpreg_match_all()は、 subject の終わりまで検索を続ける
・なお、preg_match() は、エラーが発生した場合にFALSEを返す
パターン
パターン例
/Go*gle/
・アスタリスク(*)は直前の文字「o」に0回以上繰り返した場合にマッチ・具体的に0回以上とは、「o」がない場合、「o」や「oooo」な ど「o」が1回以上繰り返されている場合にマッチ(直前の文字がない場合は、空文字にマッチ)
・全体でみれば、「G」の次に、「o」がない、あるいは「o」や「oooo」など「o」が1回以上繰り返されている文字が続き、さらに「gle」文字が続いている場合にのみマッチ
文字列 | マッチする部分 | 備考 |
---|---|---|
Ggle | Ggle | - |
Gogle | Gogle | - |
- | ||
Goooogle | Goooogle | - |
Gooooogle | Gooooogle | - |
Gpgle | マッチしない | pがなければマッチ |
Gooopgle | マッチしない | pがなければマッチ |
色々なパターン例
一覧
パターン | 文字列 | マッチする部分 | 備考 |
---|---|---|---|
/A*/ | "A" | "A" | 「A」がない、あるいは「A」が1回以上繰り返されている文字 |
/A*/ | "AAAAAA" | "AAAAAA" | - |
/A*/ | "" | "▼" | "Aがない場合でマッチ" |
/A*/ | "BBB" | "▼BBB" | "Aがない場合でマッチBBB" |
/A*C/ | "AAAC" | "AAAC" | - |
/A*C/ | "BC" | "BC" | 「A」がない、あるいは「A」が1回以上繰り返されている文字の後に、「C」文字が続いている場合 |
/A*C/ | "AAAB" | マッチしない | 「C」文字が続いていないから |
/AAA*C/ | "AAC" | "AAC" | 「AA」の次に、「A」がない、あるいは「A」が1回以上繰り返されている文字が続き、さらに「C」文字が続いている場合 |
/AAA*C/ | "AC" | マッチしない | 「AA」がないから |
/A.*C/ | "AB012C" | "AB012C" | 「A」の次に、「任意の1文字」がない、あるいは「任意の1文字」が1回以上繰り返されている文字が続き、さらに「C」文字が続いている場合 |
/A.*C/ | "AB CD" | "AB CD" | - |
/A.*C/ | "ACDE" | "ACDE" | - |
バリデーション例
「半角英数字およびアンダースコアを3 ~ 20 文字以内」でなければ
・preg_matchの結果、「半角英数字およびアンダースコアを3 ~ 20 文字以内」でなければ0が返り、else if (!0) { となる
・if(!0)は、bool(true)
} else if (!preg_match('/^\w{3,20}$/', $user_name)) {//「半角英数字およびアンダースコアを3 ~ 20 文字以内」という指定
$errors[] = 'ユーザIDは半角英数字およびアンダースコアを3 ~ 20 文字以内で入力してください';
- | - |
---|---|
郵便番号 | /^[0-9]{3}-[0-9]{4}$/ |
電話番号 | /^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/ |
Emailアドレス | |^[0-9a-z_./?-]+@([0-9a-z-]+\.)+[0-9a-z-]+$| |
全角空白のトリム | /^ *(.*?) *$/u |
全角空白を考慮したトリム | /^[\s ]*(.*?)[\s ]*$/u |
preg_match第3引数 × 後方参照
第3引数に格納される検索結果とは?
結果配列[0]
・マッチした全体が格納される
結果配列[1]
・最初のサブパターンが格納
結果配列[2]
・左から2番目のサブパターンが格納