preg_match

テキスト処理 > 正規表現

preg_matchとは?

 状態:-  閲覧数:2,293  投稿日: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を返す




パターン

 閲覧数:599 投稿日:2018-07-23 更新日:2018-07-27 

パターン例


/Go*gle/
・アスタリスク(*)は直前の文字「o」に0回以上繰り返した場合にマッチ
・具体的に0回以上とは、「o」がない場合、「o」や「oooo」な ど「o」が1回以上繰り返されている場合にマッチ(直前の文字がない場合は、空文字にマッチ)
・全体でみれば、「G」の次に、「o」がない、あるいは「o」や「oooo」など「o」が1回以上繰り返されている文字が続き、さらに「gle」文字が続いている場合にのみマッチ
文字列 マッチする部分 備考
Ggle Ggle -
Gogle Gogle -
Google Google -
Goooogle Goooogle -
Gooooogle Gooooogle -
Gpgle マッチしない pがなければマッチ
Gooopgle マッチしない pがなければマッチ


色々なパターン例

 閲覧数:641 投稿日:2018-07-23 更新日:2018-07-27 

一覧

パターン 文字列 マッチする部分 備考
/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

preg_match第3引数 × 後方参照

 閲覧数:733 投稿日:2018-07-27 更新日:2018-07-27 

第3引数に格納される検索結果とは?


結果配列[0]
・マッチした全体が格納される

結果配列[1]
・最初のサブパターンが格納

結果配列[2]
・左から2番目のサブパターンが格納


正規表現

コメント投稿(ログインが必要)



類似度ページランキング
順位 ページタイトル抜粋 %
1 preg_match 100
2 realpath 67
3 include_path 64
4 foreach文 56
5 array_map 53
6 var_dump() 50
7 spliceImageメソッド 48
8 imagick 47
9 register_globals 46
10 http_build_query 46
11 parse_url( ) 45
12 array_filter 45
13 array_reduce 45
14 Doctrine 44
15 ob_start 44
16 set_error_handler 44
17 session.gc_maxlifetime 44
18 blurImageメソッド 43
19 Composer 42
20 session_save_path() 41
2026/11/11 19:05 更新
週間人気ページランキング / 11-4 → 11-10
順位 ページタイトル抜粋 アクセス数
1 PHP用語 13
2 エラーログ確認 5
3 PHPにおけるメソッドのオーバーライドについて /「引数の数や型は、親クラスのメソッドと完全に一致していなければなりません。」とは具体的にどういう意味ですか? 4
4 SQLインジェクション | セキュリティ 3
4 static修飾子 | クラスとオブジェクト 3
4 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 3
4 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens | Fatal error(エラーメッセージ) 3
4 ログイン 3
4 エラーメッセージ / エラー原因 / エラー対応 3
5 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'データベースユーザー名'@'localhost' (using password: YES)' | phpMyAdmin(データベース関連) 2
5 実際に遭遇した例2 2
5 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 23 Out of resources when opening file '/tmp/#sql_2dd6_0.MYI' (Errcode: 24)' | エラーメッセージ 2
5 セッションのガベージコレクション (ごみの収集)はなぜ必要なの? 2
5 or(||) | 演算子 2
5 Parse error: syntax error, unexpected T_DOUBLE_ARROW in △△ on line □□ | Parse error(エラーメッセージ) 2
5 デバッグ カテゴリー 2
5 文字を表現するメタキャラクタ 2
5 コード例 … 「例外処理」はネストすることができる 2
5 HTTP_VIA | 環境変数 2
5 isset | 関数 2
2026/11/11 5:05 更新