まずは文法
preg_match(検索パターン, 検索対象文字列, 結果配列)
// よく見るのだとこんな感じ。
$pattern = '/正規表現/';
$subject = '文字列';
preg_match($pattern, $subject, $match);
ざっくりどんな機能?
1. 正規表現を用いて、文字を抽出することができる
// 郵便番号
$postal_code = '123-4567';
// 正規表現
$regex_pattern = '/^\d{3}-\d{4}$/';
preg_match($regex_pattern, $postal_code, $match);
var_dump($match);exit();
> array(1) {
[0]=> string(8) "123-4567"
}
2. 部分的に文字列を抽出することができる(キャプチャ機能)
// 郵便番号
$postal_code = '123-4567';
// 正規表現
$regex_pattern = '/^(\d{3})-(\d{4})$/';// ← ()で部分的に抽出したい部分を囲う
preg_match($regex_pattern, $postal_code, $match);
var_dump($match);exit();
> array(3) {
[0]=> string(8) "123-4567"
[1]=> string(3) "123"
[2]=> string(4) "4567"
}
3. 結果配列のキー名を指定することができる
// 郵便番号
$postal_code = '123-4567';
// 正規表現
$regex_pattern = '/^(?P<postal_code>\d{3}-\d{4})$/';// ← ?P<キー名>をつける
preg_match($regex_pattern, $postal_code, $match);
var_dump($match);exit();
> array(5) {
[0]=> string(8) "123-4567"
["before"]=> string(3) "123" // ← これ
[1]=> string(3) "123"
["after"]=> string(4) "4567" // ← これ
[2]=> string(4) "4567"
}
以上を踏まえて、個人的に…
ケン
3番目の「結果配列のキー名を指定することができる」を使うのがいいと思ってます!
理由
- 値のアクセス識別子がマジックナンバー(数字での指定)になってしまい、分かりづらい。
- キー名を指定してあげることによって、それが何を表すのかが明確になる。
なので、明示的に以下のようにしなくても第3者にとっても分かりやすい。
// 今までの値の取り方
$postal_code = $match[0];
// キー名指定の取り方
$match['postal_code']
ただ、検索パターン中に正規表現以外の文字列?P<キー名>が入ってきて、ごちゃごちゃする印象は確かにある。
しかし、個人的にはキーが$matchに明示的に格納されるので、多少ごちゃごちゃしても許容範囲内。
以上、preg_matchの便利な使い方でした!!!
コメント