preg_match

テキスト処理正規表現

preg_matchとは?

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




パターン

 閲覧数:582 投稿日: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がなければマッチ


色々なパターン例

 閲覧数:613 投稿日: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引数 × 後方参照

 閲覧数:716 投稿日: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/7/08 11:20 更新
週間人気ページランキング / 7-1 → 7-7
順位 ページタイトル抜粋 アクセス数
1 PHP用語 12
2 Parse error: syntax error, unexpected T_REQUIRE_ONCE, expecting T_FUNCTION | Parse error(エラーメッセージ) 5
2 ログイン 5
3 session.gc_maxlifetime | セッション 4
3 SHA-1(Secure Hash Algorithm 1) | 関数 4
4 リファレンス渡し | リファレンス 3
4 No route found fo | エラーメッセージ 3
4 isset | 関数 3
4 クラス | クラスとオブジェクト 3
4 「添え字(インデックス)」と「要素(値)」で、構成されている 3
4 コード例 3
4 Fatal error: Cannot redeclare 関数名() (previously declared in ファイル名:○○) in ファイル名 | Fatal error(エラーメッセージ) 3
4 セッションファイルの特徴 3
4 セッション カテゴリー 3
4 Catchable fatal error: Object of class DateTime could not be converted to string | Fatal error(エラーメッセージ) 3
5 Fatal error: Uncaught Dotenv\Exception\InvalidFileException: Dotenv values containing spaces must be surrounded by quotes. | Fatal error(エラーメッセージ) 2
5 No data available for specified ID | Twitter API(エラーメッセージ) 2
5 Warning: include() [function.include]: Failed opening '**.php' for inclusion (in | Warning(エラーメッセージ) 2
5 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'カラム名' cannot be null | Fatal error(エラーメッセージ) 2
5 「仮引数」「実引数」 | 関数 2
2026/7/8 5:05 更新