我想分割不是ASCII格式的字符,即UTF-8。 我写了这行代码
result = string.scan(/[\x0600-\x06ff]/)
不知怎的,它不起作用,并给出错误
"empty range in char class : /[\x0600-\x06ff]/".
我只是想检查一个角色是否属于正则表达式的范围。如果是这样,那就把它分开。
答案 0 :(得分:3)
您的问题是您错误地使用了\x
。 \xHH
以十六进制指定HH
的字节。这意味着\x0600
实际上是\x06
,0
和0
,并且您的整个角色类看起来像(用空格来分隔部分):
\x06 0 0-\x06 f f
唯一的范围是0-\x06
,这不是你想要的。如果要按十六进制值指定Unicode,则需要使用\u
:
/[\u0600-\u06ff]/
此外,您的范围错过了很多非ASCII值(例如'µ'
\u00b5
),您最好使用Vasili's /[^[:ascii:]]/
POSIX命名字符类或/[^\p{ASCII}]/
。
答案 1 :(得分:1)
Ruby在它的regex 的实现中不支持Unicode令牌(或者我的RegexBuddy告诉我谎言)
如果我尝试\u0000
,我会收到一条错误消息,说明它不受支持
如果您的Ruby版本支持它,则范围为[\u0000-\uFFFF]
您可以尝试使用POSIX类[^[:ascii:]]
来匹配非ASCII的所有内容
您也可以尝试[^\x00-\xFF]
来匹配没有小数值0-255的所有内容。