Ruby on rails Ruby中非ASCII字符范围检查的正则表达式
我想拆分非ASCII格式的字符,即UTF-8。 我写了这行代码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,我会收到一个错误,表明它
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]/