- ベストアンサー
PHP正規表現について、ゴミ?
正規表現の勉強をしています。 カッコの中の値を取得したいのですが、ゴミみたいのが入ってしまい困っています。 プログラムは $aaa = "お茶[抹茶]、お花[あじさい]、ニャー[猫]、カフェオレ[100円]"; preg_match_all("/\[(.*?)\]+/", $aaa, $matches); print_r($matches); と書きました。 結果は、 Array ( [0] => Array ( [0] => [抹茶] [1] => [あじさい] [2] => [[猫] [3] => [100円] ) [1] => Array ( [0] => 抹茶 [1] => あじさい [2] => [猫 [3] => 100円 ) ) となりました。「ー」の後に「[」がついてしまうのはなぜなんでしょうか?? 解決策ありましたら宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
がると申します。 直接的には「文字コードShift jisに起因する問題」になります。 ーのShift jisコードの2バイト目が[と同一の文字であるために、正規表現エンジンはそれを拾ってしまうのが直接的な原因です。 とりあえず ・文字列を一度EUCに置換してから 処理をするとこういったことが防げます。 mb_convert_encodingという関数について調べてみてください。 http://www.php.net/manual/ja/function.mb-convert-encoding.php
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
$aaa = "お茶[抹茶]、お花[あじさい]、ニャー[猫]、カフェオレ[100円]"; mb_ereg_search_init($aaa, "\[(.*?)\]"); while(true){ list($bracket, $value)=mb_ereg_search_regs(); if($bracket){ $matches[] = $value; } else { break; } } print_r($matches);