たけるのプログラミング

作ったものとか、気ままにアップします。

【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]に代入される。