Ruby on rails Ruby中非ASCII字符范围检查的正则表达式

Ruby on rails Ruby中非ASCII字符范围检查的正则表达式,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我想拆分非ASCII格式的字符,即UTF-8。 我写了这行代码 result = string.scan(/[\x0600-\x06ff]/) 不知怎的,它不起作用了,并且给出了错误 "empty range in char class : /[\x0600-\x06ff]/". 我只想检查一个字符是否在正则表达式的范围内。如果是这样的话,就把它分开。Ruby在它的regex实现中不支持Unicode令牌(或者我的RegexBuddy在骗我) 如果我尝试\u0000,我会收到一个错误,表明它

我想拆分非ASCII格式的字符,即UTF-8。 我写了这行代码

result = string.scan(/[\x0600-\x06ff]/)
不知怎的,它不起作用了,并且给出了错误

"empty range in char class : /[\x0600-\x06ff]/".

我只想检查一个字符是否在正则表达式的范围内。如果是这样的话,就把它分开。

Ruby在它的regex实现中不支持Unicode令牌(或者我的RegexBuddy在骗我)

如果我尝试
\u0000
,我会收到一个错误,表明它不受支持。
如果您的Ruby版本支持它,则范围为
[\u0000-\uFFFF]

您可以尝试使用POSIX类
[^[:ascii:]
来匹配所有非ascii类。

您也可以尝试
[^\x00-\xFF]
匹配十进制值不为0-255的所有内容。

您的问题是您使用的
\x
不正确
\xHH
指定以十六进制表示的
HH
字节。这意味着
\x0600
实际上是
\x06
0
0
,并且您的整个字符类看起来像(用空格分隔部分):

唯一的范围是
0-\x06
,这不是您想要的。如果要通过十六进制值指定Unicode,则要使用
\u

/[\u0600-\u06ff]/

此外,您的范围缺少许多非ASCII值(例如
'µ'
,即
\u00b5
),最好使用
/[^[:ASCII:]/
POSIX命名字符类或
/[^\p{ASCII}]/

我不能使用它,因为我必须检查字符是否在给定范围内。如果是,则拆分它。我的任务不是检查每个非ascii字符。我想检查的范围在问题0600-06ff中给出。
\uhhh
用于通过十六进制值指定Unicode,但对于
:ascii:
,它是+1。我想用它来计算Unicode字符数,但这个正则表达式不起作用,它总是在其他部分。你能发现问题吗
如果unicode.match(/[\u0600-\u06ff]/)unicodeChars+=1,否则ascihars+=1 end
unicode
看起来像什么?为什么不使用Vasili的
[^[:ascii:]
正则表达式呢?您的0x0600到0x06ff范围遗漏了相当多的位(例如
'µ'
,即
\u00b5
。在上述代码中,unicode有4位十六进制数,这也是我不使用[^[:ascii:]的原因]我必须检查文档中有多少是乌尔都语,有多少是英语。所以为了检查,我必须比较给定范围内的每个字符。因为还有很多其他unicode字符。如果我使用[^[:ascii:]]作为正则表达式,乌尔都语以外的其他unicode字符也将在计数中存在。因此乌尔都语字符的unicode范围为0600-06ffI仍然不知道您的
unicode
字符串的确切外观,因此我不能再多说了。
“\u0600”。匹配(/[\u0600-\u06ff]/)
对我来说工作正常。
/[\u0600-\u06ff]/