【PHP】正規表現を学ぶ【その1】
Linuxを勉強してたら正規表現の知識が乏しかったので勉強する。
正規表現をざっとまとめた。
引用参照url
正規表現 | 任意の一文字にマッチする:ドット(.)
正規表現 | いずれか一文字にマッチする:角括弧([...])
正規表現 | バックスラッシュ(\)+文字を使った文字クラスの略記法
正規表現 | 文字列の先頭と文字列の末尾の位置にマッチする:キャレット(^) ドル記号($)
正規表現 | 単語の先頭と単語の末尾にマッチする:\b \B
正規表現 | 直前の文字の繰り返し:* + ? {num} {min,max}
基本的なやつ
* | 任意の一文字にマッチする |
---|---|
[] | 中のいずれかにマッチする。[0-9]0から9 [a-z]aからz [A-Z]AからZ また[^]とすることで中で指定した文字以外とマッチする |
\d | 数字 |
\D | 数字以外 |
\w | 英数字とアンダーバー |
\W | 英数字とアンダーバー以外 |
\s | 空白文字 |
\S | 空白文字以外 |
^ | 文字列の先頭にマッチする |
$ | 文字列の末尾にマッチする |
\b | 単語の先頭または単語の末尾にマッチする |
\B | 単語の先頭及び単語の末尾以外にマッチする |
量指定 | |
{num} | 直前の文字をnum回繰り返す |
{min,} | 直前の文字をmin回以上繰り返す |
{,max} | 直前の文字をmax回以下繰り返す |
{min,max} | 直前の文字をmin以上、max以下繰り返す |
* | 直前の文字が0回以上連続する |
+ | 直前の文字が一回以上連続する |
? | 直前の文字が0か1回現れる |
他にも
()によるグループ化や| (縦線)を使ったパターンといったテクニックもある。
このqiitaの表が上に載ってないやつも載っててわかりやすい。
正規表現まとめ - Qiita
実際にPHPで正規表現を使ってみる。
今回PHPの関数であるpreg_matchを使う。引数として渡す文字列に対して正規表現による検索を行う。
PHP: preg_match - Manual
実際に使ってみる。
ユーザーが携帯電話番号を入力したとして、それが本当に携帯電話番号かpreg_matchを使って検証する。
<?php //携帯電話番号 $test_data = '080-0000-0000'; echo preg_match('/^(070|080|090)-\d{4}-\d{4}$/',$test_data,$array); var_dump($array);
実行結果
1 array(2) { [0]=> string(13) "080-0000-0000" [1]=> string(3) "080" }
文字列の中に正規表現のパターンがあったので返り値として1が返されています。もしなかった場合は0が帰ってきます。また第三引数に配列を渡してあげることで、その配列に検索結果を代入することができます。
[0]にパターン全体にマッチしたテキストが代入されます。また[1]にはサブパターンにマッチした文字列が代入されるとありました。このサブパターンとは
PHP: サブパターン - Manual
によると
丸カッコで括られたパターンのこと
とあった。つまり上の例の(070|080|090)。このサブパターンに080がマッチしているので、この080が[1]に代入されている。このように2番目のサブパーンにマッチした文字は[2]に代入される。