UTF-8の全角カタカナ正規表現

UTF-8全角カタカナの正規表現マッチが必要となり、
どこぞにありそうだと思いつつも
勉強もかねて自分で作ってみる。

■とりあえず思いつくところを並べてみた
(スクリプターらしからぬ行為)

$str = ”
ァ ィ ゥ ェ ォ
ア イ ウ エ オ
カ キ ク ケ コ
ガ ギ グ ゲ ゴ
サ シ ス セ ソ
ザ ジ ズ ゼ ゾ
タ チ ツ テ ト
ダ ヂ ヅ デ ド

ナ ニ ヌ ネ ノ
ハ ヒ フ ヘ ホ
バ ビ ブ ベ ボ
パ ピ プ ペ ポ
マ ミ ム メ モ
ャ ュ ョ
ヤ ユ ヨ
ラ リ ル レ ロ
ワ ヲ ン
ー ・ ヽ ヾ
“;


■16進数に変換した値をキーとしててソート&ダンプしてみる。

$array = array();
$strs = explode(' ', $str);
foreach ($strs as $s){
$s = trim($s);
if($s) {
$array[(bin2hex($s))] = $s;
}
}

var_dump($array);

実行結果


■結果から、連番部分を抜き出せばいいのかもしれないが
思いついてない文字があるかもしれないので、
最小[e382a1]-100 ~ 最大[e383be]+100まで文字をダンプしてみる。
もちろん100という数字に根拠なし。

$start = hexdec('0xe382a1')-100;
$end = hexdec('0xe383be')+100;

$array2 = array();
for($i = $start; $i <= $end; $i++ ) { $array2[(dechex($i))] = pack("H*",dechex($i)); } var_dump($array2); 実行結果


■結果をざっと眺めて、「ヰ」とか「ヱ」とか忘れてたことに気づく。
で、カタカナ部分のみ抜き出すと
e382a1 ~ e382bf
e38380 ~ e383b6
e383bb ~ e383be
だったのでこれを1バイトづつマッチさせる感じで正規表現を記述。
1バイト目がe3、2バイト目が82、3バイト目a1-bf
1バイト目がe3、2バイト目が83、3バイト目80-b6
1バイト目がe3、2バイト目が83、3バイト目bb-be
の3パターン

コメントを残す

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

CAPTCHA