preg_match

テキスト処理正規表現

preg_matchとは?

 状態:-  閲覧数:2,202  投稿日: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がなければマッチ


色々なパターン例

 閲覧数:620 投稿日: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/22 11:54 更新
週間人気ページランキング / 7-15 → 7-21
順位 ページタイトル抜粋 アクセス数
1 PHP用語 9
2 コンストラクタ デストラクタ | クラスとオブジェクト 4
3 実際に遭遇した例 2
3 session.entropy_fileデフォルト設定値 2
3 デリミタ 2
3 PHPで定数を定義する方法は2種類ある / 配列定数の定義 2
3 Parse error: syntax error, unexpected $end in ○○.php on line △△ | Parse error(エラーメッセージ) 2
3 PHPでcurlを使用するためには?/ 2.オプション設定 / curlでPOST送信 2
3 You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. | Twitter API(エラーメッセージ) 2
3 htmlspecialchars / htmlentities / addslashes / mysql_real_escape_string / mysqli_real_escape_string | セキュリティ 2
3 デフォルト引数 | 関数 2
3 Fatal error: Uncaught Error: Class 'Mecab_Tagger' not found in /var/www/★★.php:☆☆ | Fatal error(エラーメッセージ) 2
3 遭遇例1.存在する間違ったデータベース名を指定 2
3 リファレンス基本操作は3通り 2
4 No route found fo | エラーメッセージ 1
4 2.引数で与えられたタイムスタンプに基づき、整形表示する関数 1
4 SQLite(エラーメッセージ) カテゴリー 1
4 環境変数 カテゴリー 1
4 Sorry, that page does not exist. | Twitter API(エラーメッセージ) 1
4 セッション / セッションとは? / セッションの目的 1
2026/7/22 5:05 更新