preg_match

テキスト処理正規表現

preg_matchとは?

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




パターン

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


色々なパターン例

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

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

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


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

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

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

Twitter検索結果。「preg_match」に関する最新ツイート


正規表現

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



類似度ページランキング
順位 ページタイトル抜粋
1 realpath 67
2 include_path 64
3 foreach文 56
4 array_map 53
5 var_dump() 50
6 spliceImageメソッド 48
7 imagick 47
8 http_build_query 46
9 register_globals 46
10 array_reduce 45
11 array_filter 45
12 parse_url( ) 45
13 set_error_handler 44
14 Doctrine 44
15 ob_start 44
16 session.gc_maxlifetime 44
17 blurImageメソッド 43
18 Composer 42
19 session_save_path() 41
20 session_start() 40
2023/6/04 20:28 更新
週間人気ページランキング / 5-28 → 6-3
順位 ページタイトル抜粋 アクセス数
1 ブラウザを閉じたらセッションデータはどうなるの? | セッション 34
2 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 14
3 スコープ | 変数 13
4 ブラウザを閉じたらセッションデータはどうなるの? | セッション 12
5 PHP用語 11
6 Fatal error: Access level to ▲::$△ must be protected (as in class ●) or weaker | Fatal error(エラーメッセージ) 9
7 セッションID | セッション 6
7 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 6
7 コード例 … 「例外処理」はネストすることができる 6
7 Warning: include() [function.include]: Failed opening '**.php' for inclusion (in | Warning(エラーメッセージ) 6
7 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 6
7 PHPで定数を定義する方法は2種類ある / 配列定数の定義 6
7 Fatal error: Call to undefined method MDB2_Error::execute() in ○○ on line △△ | Fatal error(エラーメッセージ) 6
8 型の種類 | 型 5
8 Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): failed to open stream: Permission denied in | Fatal error(エラーメッセージ) 5
8 ガベージコレクション | 機能 5
9 curl で Cookie を使用する 4
9 @ | 演算子 4
9 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column | Fatal error(エラーメッセージ) 4
9 Warning: PDO::query(): LOAD DATA LOCAL INFILE forbidden | Warning(エラーメッセージ) 4
2023/6/4 1:01 更新