根据Oniguruma 文档,\d
字符类型匹配:
十进制数字字符
Unicode:General_Category -- Decimal_Number
但是,\d
在包含所有 Decimal_Number 字符的字符串中进行扫描会导致仅匹配拉丁语 0-9 数字:
#encoding: utf-8
require 'open-uri'
html = open("http://www.fileformat.info/info/unicode/category/Nd/list.htm").read
digits = html.scan(/U\+([\da-f]{4})/i).flatten.map{ |s| s.to_i(16) }.pack('U*')
puts digits.encoding, digits
#=> UTF-8
#=> 0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨…
p RUBY_DESCRIPTION, digits.scan(/\d/)
#=> "ruby 1.9.2p180 (2011-02-18) [i386-mingw32]"
#=> ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
我是否误读了文档?为什么不\d
匹配其他 Unicode 数字,和/或有办法让它匹配?