- 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";