preg_match

テキスト処理正規表現

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を返す




パターン

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


色々なパターン例

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

 閲覧数:551 投稿日: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
2024/11/23 11:46 更新
週間人気ページランキング / 11-16 → 11-22
順位 ページタイトル抜粋 アクセス数
1 ブラウザを閉じたらセッションデータはどうなるの? | セッション 8
2 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 5
3 Fatal error: Access level to ▲::$△ must be protected (as in class ●) or weaker | Fatal error(エラーメッセージ) 4
3 Warning: strlen() expects parameter 1 to be string, array given in ○○.php on line △△ | Warning(エラーメッセージ) 4
4 PHPで定数を定義する方法は2種類ある / 配列定数の定義 3
4 インポートするデータを受信できませんでした。ファイル名が送信されていないか、ファイルサイズが PHP の設定で許可された最大値を超えています。FAQ 1.16 をご覧ください | エラーメッセージ 3
4 ブラウザを閉じたらセッションデータはどうなるの? | セッション 3
4 クラスの継承 | クラスとオブジェクト 3
5 curl で Cookie を使用する 2
5 例外処理 | 制御構造 2
5 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 2
5 関数定義内での「外部ファイル読込」 | 制御構造 2
5 set_error_handler | 例外処理(制御構造) 2
5 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined | Fatal error(エラーメッセージ) 2
5 コード例 … 「例外処理」はネストすることができる 2
5 PHP用語 2
5 register_shutdown_function | 関数処理 関数 2
6 クロージャ | 関数 1
6 session.cookie_lifetime / session.use_cookies | セッション 1
6 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 1
2024/11/23 1:01 更新