PHPのpreg_matchは対象文字列に検索文字列が含まれているかを判断するメソッドです。パラメータに$matchを設定すると検索結果が$matchに配列で返ります。検索文字列に普通に文字列を指定することもできますが、正規表現を使用すると、とても汎用的に文字列を取得することができます。
今回はPHPのpreg_matchと正規表現を使用して、都道府県と市町村を分割して取得する方法を記事にしたいと思います。
正規表現で住所から都道府県、市町村を分割して取得するコードはこんな感じです。
1 2 3 4 5 |
<?php $address = '神奈川県藤沢市美山0-2-7'; preg_match("/(.*?[都道府県])(.*?[市町村])/u", $address, $maches); var_dump($maches); ?> |
preg_matchの結果はこんな感じです。
array(3) { [0]=> string(21) "神奈川県藤沢市" [1]=> string(12) "神奈川県" [2]=> string(9) "藤沢市" }
住所から都道府県、市町村を分割して取得するコード解説
上記のコードを簡単に解説します。
preg_match
文字列を検索しマッチングを行います。
使い方
preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
パラメータ
- $pattern
- 検索するパターンを表す文字列。
- $subject
- 入力文字列。
- $matches
- matches を指定した場合、検索結果が配列に代入されます。
- $flags
- flags には以下のフラグの組み合わせを指定できます。
- PREG_OFFSET_CAPTURE
- このフラグを設定した場合、各マッチに対応する文字列のオフセットも(バイト単位で)返されます。 これは、matches の値を配列に変更することに注意してください。 その配列のすべての要素は、 オフセット 0 で一致した文字列、 およびその文字列のオフセット 1 での subject へのオフセットからなります。
- PREG_UNMATCHED_AS_NULL
- このフラグが渡されると、マッチしなかったサブパターンは NULL として通知されます。 渡されなかった場合、空の string として通知されます。
返り値
pattern が指定した subject にマッチした場合に 1 を返します。 マッチしなかった場合は 0、エラーが発生した場合は FALSE を返します。
正規表現
.*?
- 任意の文字の0回以上の繰り返しの最短マッチ。
[都道府県]
- 都、道、府、県のいずれかの文字
()
- 都道府県、市町村のそれぞれのグルーピング
/u
- UTF-8を指定する修飾子。
「PHP preg_match 正規表現で住所から都道府県、市町村を分割して取得する」まとめ
今回はpreg_match、正規表現で住所から都道府県や市町村を別々に抜き出すコードを紹介しました。いかがだったでしょうか?。
ワードプレスのカテゴリーを都道府県と市町村に親子関係で分けたい時など、使用できる場面は結構あるのでなんとなく頭に置いておいて頂ければと思います。それではまた。