PHPは5.1以降であれば「\p{xxxxx}」という形式のUnicode文字プロパティというものがpreg系の正規表現として使えます。
漢字は「\p{Han}」とします。「p」は小文字です。大文字だと漢字以外になります。「Han」の先頭は大文字です。
次のようにすると漢字に合致するかどうか調べられます。パターン修飾子として「u」を使います。
$text = "ABCabc123あいうえおカキクケコ漢字";
preg_match_all("/\p{Han}/u", $text, $m);
print_r($m);//Array ( [0] => Array ( [0] => 漢 [1] => 字 ) )
preg_match_all("/\p{Han}/u", $text, $m);
print_r($m);//Array ( [0] => Array ( [0] => 漢 [1] => 字 ) )
具体的にはどのようになっているのでしょうか。
U+0000から順番に一つずつ\p{Han}に合致する範囲を調べてみました。
\p{Han}の範囲
U+2E80-2E99
U+2E9B-2EF3
U+2F00-2FD5
U+3005-3005
U+3007-3007
U+3021-3029
U+3038-303B
U+3400-4DB5
U+4E00-9FCC
U+F900-FA6D
U+FA70-FAD9
U+20000-2A6D6
U+2A700-2B734
U+2B740-2B81D
U+2F800-2FA1D
かなり細かく指定されています。
例えば、U+3005は「々」、U+3007は「〇」(漢数字のゼロ)で、これらの間に挟まれたU+3006は「〆」です。
一般的な漢字はU+4E00-9FCCの範囲に入ります。
同様に、ひらがなは「\p{Hiragana}」、カタカナは「\p{Katakana}」とします。
とすると「漢字またはひらがなまたはカタカナにマッチ」となります。
コメント
[…] PHP で漢字を表す正規表現 | You Look Too Cool […]