Home > php > 悲しいけどこれ、Unicodeなのよね

悲しいけどこれ、Unicodeなのよね

  • 2006-12-13
  • php

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

「すべての漢字を取り出す」というタイトルがどうなのって気もするが (やりたいことはトークン化です) それは置いといて。

Unicodeでやろうとすると、片仮名のヴより小さいヶの方が後だったり、 平仮名でもそもそもこの文字何て読むのってのがあったりする。 U+309fとか

「ヶ」が片仮名なのかどうかとかはゆにこーどのえらいひとにきいてください。

<?php
$strToSplit = "関ヶ原";

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

Array
(
    [0] => Array
    (   
        [0] => 関
        [1] => 原
    )

)

こういうのは取りこぼしがイヤなので、最後に.を付けておくといいと思う。

preg_match_all('/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+|./u', $strToSplit, $aMatches);

漢字に関してもいろいろあるけど書かない。

Perlなら、UnicodeのPropertyを使えるので(Dan methodか!?)、こんな感じか。

use Encode;
use utf8;

binmode STDOUT, ":encoding(euc-jp)";
my $strToSplit = "関ヶ原のタタカイABC01";
my @aMatches = 
    ($strToSplit =~ m/
    \p{Han}+|
    \p{Hiragana}+|
    \p{Katakana}+|
    [a-zA-Z0-9]+|
    [a-zA-Z0-9]+|
    .+
    /gx);
print join ',', @aMatches, "\n";

Writeback:0

Comment Form

writeback message: Ready to post a comment.

TrackBack ping me at
http://www.mono-space.net/blog/php/e061213_unicode.trackback

Page Top