前の記事 ≪:クセロ、PDF作成ソフト『瞬間PDF』を無償化
次の記事 ≫:文章からキーワードを抜き出すAPI 「KOSHIAN」

「すべての漢字を取り出す正規表現」をPHPで試す、を正しく行う

2006年12月12日-はてなブックマーク

スポンサード リンク
[PR] 英単語を忘却曲線アプリを使って超効率よく記憶する方法
Information Flow and Stock: [PHP] mb_ereg()じゃない、preg_match_all()に/uをつけるんだ!
なので、できる限りpreg系の関数を使いたいわけですが、検索対象や検索パターンに日本語が含まれているときは、日本語処理に対応したereg系の関数であるmb_ereg系の関数が使われることが多いようです。

以前、「すべての漢字を取り出す正規表現」をPHPで試す、を正しく行う方法。
以前はmb_eregによる方法を示しましたが、次の方法の方がうまく動作するようです。

preg_match_all('/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/u', $strToSplit, $aMatches);
print_r($aMatches); // マッチ結果が全出力

確かに、なぜか取れない漢字があったので、( ) で括って独自に追加したりしていましたが、この方が簡単でいいですね。
/u を使うことで UTF-8 として認識するようです。

ちなみに、以前紹介したのは次のようにループが入っちゃってました。

while(1){
    $bytes = mb_ereg("[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+", $str, $match);
    if ($bytes == FALSE) {
        break;
    } else {
        $match = $match[0];
        array_push($token, $match);
    }
    $pos = strpos($str, $match);
    $str = substr($str, $pos+$bytes);
}

preg_match_all関数ならマッチ結果を全部連想配列に入れることが可能なので、全ての漢字を取り出したい場合はこっちを使ったほうがよいですね。

関連の記事検索:PHP, 正規表現, チュートリアル, プログラミング, 漢字, regexp
スポンサード リンク

By.KJ : 2006年12月12日 07:03 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)