UTF8にマッチする正規表現
たつをさんのUTF-8の文字にマッチする正規表現を読んで、なるほどと思いつつ「ビットパターンから生成することもできるのでは?」と感じました。
そこでRubyで書いてみました。こんな風に。
rs = Array.new [ "0xxxxxxx", "110xxxxx 10xxxxxx", "1110xxxx 10xxxxxx 10xxxxxx", "11110xxx 10xxxxxx 10xxxxxx 10xxxxxx", "111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx", "1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx", ].each do |ps| s = "" ps.split(/ /).each do |bs| min = sprintf("%02X", eval("0b" + bs.gsub(/x/, "0"))) max = sprintf("%02X", eval("0b" + bs.gsub(/x/, "1"))) s += "[\\x#{min}-\\x#{max}]" end rs << s end puts rs.join("\n|") # puts rs.join("|")
実行結果です。見やすいように改行しています。
[\x00-\x7F] |[\xC0-\xDF][\x80-\xBF] |[\xE0-\xEF][\x80-\xBF][\x80-\xBF] |[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF] |[\xF8-\xFB][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF] |[\xFC-\xFD][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF]