[ロ]mb_eregよりもpreg_matchがいいの?

このエントリーをはてなブックマークに追加
はてなブックマーク - [ロ]mb_eregよりもpreg_matchがいいの?
Facebook にシェア
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]
[`tweetmeme` not found]

開発環境がSJIS(Windows)で実際に使うのがUTF-8(FC4)という事情もあり、気が付くのが遅れた。
UTF-8の環境下において正規表現を日本語の文字列に適用するには「mb_ereg」じゃなくて「preg_match」を使うのが吉みたい。
ANI.SONG用なんだけど、次のようなプログラムを書いて後ろの[REAL128]とかを削除したい。


$orignWord = "ドラマチック[REAL128]";
$searchWordList = new SearchWordList();
if ( mb_ereg( '^(.+)\[(.+)\]', $orignWord, $params ) ) {
     $searchWordList->add($params[1]);
}
print $searchWordList->get();

このプログラムの期待出力結果は


> php aaa.php
ドラマチック

で、Windows上のSJIS環境で動作させている分には特に問題は起こらなかった。


それをUTF-8環境のFC4上で実行すると、マッチしてくれない。もちろんファイルの文字コードとかは解決済み。
散々悩んだ挙句、Googleでmb_ereg UTF-8と検索してみると、pregの方がいいみたいなものを発見。とりあえずpreg使ってみるかーということで、こんな感じに。


$orignWord = "ドラマチック[REAL128]";
$searchWordList = new SearchWordList();
if ( preg_match( "/^(.+)\[(.+)\]/", $orignWord, $params ) ) {
     $searchWordList->add($params[1]);
}
print $searchWordList->get();

mb_eregをpreg_matchに変更して、正規表現の書き方もpreg_match用(perl互換)に書き直す。


> php aaa.php
ドラマチック

期待通りの結果に。できたからいいけど、うーん、って感じだ。
で、それを実装した結果はこちらです。「アマゾンで次の言葉を検索する」といくつか候補が出るようにしました。
【参考サイト】
「正規表現」 Perl講座

Popular Posts:

“[ロ]mb_eregよりもpreg_matchがいいの?” への4件の返信

  1. うーむ、曲名と歌手名はいい感じになったけど、番組名は変則的な登録が多くて厳しい・・・。もうちょっと色々フィルタしないとだめだなぁ。

  2. 登録するデータのフォーマットをしっかりとしておけばっ。
    4月くらいに登録データの9割方整理したんですけどね。

  3. いいこと書いてあるんだけどコード部分の文字と背景色の組み合わせは目に負担がかかります

  4. ご指摘ありがとうございます!
    コード部分の背景色を灰色にして見やすいようにしてみました。
    今後とも宜しくお願いします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*