ID非公開

2016/11/3 15:53

33回答

PHPで都道府県を抽出する方法 長々しい住所から、都道府県部分だけを抽出することを考えております。

PHP1,027閲覧

ベストアンサー

0
ID非公開

質問者2016/11/3 19:42

ご回答有難うございます。 まぁ、47個だけなんで、確かにそれでいきます。ちなみにphpで特定の文字列を削除する組み込み関数はなさげですか?ちょっと調べたのですが、なさげでしたが、もしご存知ならまでです

その他の回答(2件)

0

マッチングを1個あたり47回回すのは非効率なので,「|」で結合して1つのパターンにしてしまうほうが賢いです。 最適化されたように書くとsleepy_causeさんのようにグループ化することになりますが,さらに無駄なキャプチャを削るようにすると $pattern = '/東京都|北海道|(?:大阪|京都)府|(?:三重|兵庫|千葉|埼玉|大分|奈良|岐阜|岩手|島根|新潟|栃木|沖縄|熊本|福井|秋田|群馬|長野|青森|高知|鳥取|(?:宮|長)崎|(?:宮|茨)城|(?:佐|滋)賀|(?:静|福)岡|山(?:口|形|梨)|愛(?:媛|知)|(?:石|香|神奈)川|(?:富|岡|和歌)山|(?:福|広|徳|鹿児)島)県/'; または $pattern = '/東京都|北海道|(?:大阪|京都)府|(?:三重|兵庫|千葉|埼玉|大分|奈良|岐阜|岩手|島根|新潟|栃木|沖縄|熊本|福井|秋田|群馬|長野|青森|高知|鳥取|[宮長]崎|[宮茨]城|[佐滋]賀|[静福]岡|山[口形梨]|愛[媛知]|(?:[石香]|神奈)川|(?:[富岡]|和歌)山|(?:[福広徳]|鹿児)島)県/u'; ですかね。前者のように文字クラスを排除してu修飾子をカットするほうが速いかもしれません。また先頭だけの一致に限定するなら $pattern = '/^(?:東京都|北海道|(?:大阪|京都)府|(?:三重|兵庫|千葉|埼玉|大分|奈良|岐阜|岩手|島根|新潟|栃木|沖縄|熊本|福井|秋田|群馬|長野|青森|高知|鳥取|(?:宮|長)崎|(?:宮|茨)城|(?:佐|滋)賀|(?:静|福)岡|山(?:口|形|梨)|愛(?:媛|知)|(?:石|香|神奈)川|(?:富|岡|和歌)山|(?:福|広|徳|鹿児)島)県)/'; のように先頭に「^」が必要です。この正規表現を使って都道府県名だけを抽出するには $result = preg_match($pattern, $string, $m) ? $m[0] : null; のように書きます。

0

[三-鹿]{2,3}[都道府県] この単純さで不安なら 東京都|北海道|(大阪|京都)府|(三重|兵庫|千葉|埼玉|大分|奈良|岐阜|岩手|島根|新潟|栃木|沖縄|熊本|福井|秋田|群馬|長野|青森|高知|鳥取|[宮長]崎|[宮茨]城|[佐滋]賀|[静福]岡|山[口形梨]|愛[媛知]|(石|香|神奈)川|(富|岡|和歌)山|(福|広|徳|鹿児)島)県

ID非公開

質問者2016/11/3 19:44

ご回答有難うございます。 三-鹿がちょっとわかりませんでした。