Ruby で平仮名にマッチする正規表現

Ruby で平仮名にマッチする正規表現

2007/11/19 2:31am

Ruby 1.8 系で平仮名にマッチする正規表現を書きたい。

正規表現で Unicode ブロックが使えれば楽なのだが、残念ながら Ruby 1.8 ではサポートされていない。

鬼車

ちなみに 1.9 で搭載される予定の鬼車では、以下のような形式で Unicode ブロックやカテゴリを指定できるようだ(参考:鬼車 正規表現 Version 5.6.0)。

もっとも、実際に試したわけではないので、現状の Ruby 1.9 で上記のような使い方ができるのかは分からない。

Ruby 1.8

結局、Ruby 1.8 では平仮名に相当するコードポイントの範囲を直接、正規表現で指定してやるのが簡単そうだ。

Unicode Character Database の Block.txt によると平仮名(Hiragana)の範囲は 0x3040 から 0x309f なので、Ruby リファレンスマニュアルの FAQ「10.7 SJISの機種依存コード84BF から 889Fまでを空白に置き換えたいのですが」を参考に正規表現を書いてみる(ただし、UTF-8 限定)。

/#{"[#{[0x3040].pack('U')}-#{[0x309f].pack('U')}]"}/u

コードポイントから UTF-8 リテラル文字列への変換に Array#pack を利用しているため読みづらくなっている。もっといい方法があるのかもしれない。

参考