UTF-8の正規表現での取り扱い

Rubyにて,正規表現で,UTF-8文字コードにマッチするようにしたい時,どのようにすれば良いか.
正直,どういう状況でUTF-8文字コード限定でマッチさせたくなるのか,理解に苦しむ所ではありますが,Rubyで無駄に頑張りながらやってみることにしま.


例えば,ボクが,以下のような


曲名[tab]アーティスト[tab]時間[tab]ジャンル[tab]レート
のように整形され,文字コードUTF-8のファイルから,曲名,ジャンルだけを取り出し,標準出力したいとする.その時,無駄に頑張ったRubyのコードは以下のようになります.

#! /opt/local/bin/ruby

char_utf8 = '(?:[¥x00-¥x7f]|[¥xc0-¥xdf][¥x80-¥xbf]|[¥xe0-¥xef][¥x80-¥xbf]{2}
|[¥xf0-¥xf7][¥x80-¥xbf]{3})' # 注)長過ぎるので,改行入れています

f = File.open(ARGV[0],"r")

while f.gets
$_ = $_.chomp.sub(/^(#{char_utf8}*)¥t#{char_utf8}*¥t#{char_utf8}*
¥t(#{char_utf8}*)¥t#{char_utf8}*/, # 注)長過ぎるので,k(ry
"¥¥1¥t¥¥2")
puts $_
end

f.close

char_utf8でUTF-8文字コードを全て指定し,それを正規表現(この場合,適用しているのはsub)に埋め込んでいます.あと,(?:...)で,正規表現に埋め込んだ時に後方参照されないようにしています.char_utf8は,例えば,文字コードについてなんかを見ると,解読できますよ.
あと,他に参考したページなんかでは,[¥x80-¥xbf]の繰り返しを5回までやってましたが,どんな意味があるんだろう.


実際に試してみるぞ,入力ファイルは,こんなかんじ.


オブジェクトはRuby もち 4:20 ロック 4
Pythonを超えて hkb 5:31 演歌 3
Perlの1・2・3 CPANオールスターズ 4:24 ロック 2
Railsブギ カナディアンズ 4:23 ポップ 5
たぶん実在しません.んじゃ実行.

$ ruby foo.rb music.txt
オブジェクトはRuby ロック
Pythonを超えて 演歌
Perlの1・2・3 ロック
Railsブギ ポップ
なんだか,ちゃんと曲名とジャンルが抜き出せてるみたいです.よかったよかった.あの意味不明な呪文が,ちゃんとマッチしてくれているみたいです.正直,この場合だと.*で適当にマッチさせれば良いですから,こんな文字コードで頑張る必要は無い!可読性も糞悪いし!