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]