我想分割不是ASCII格式的字符,即UTF-8。 我写这行代码Ruby中非ASCII字符范围检查的正则表达式
result = string.scan(/[\x0600-\x06ff]/)
不知怎么就不能正常工作,并给出错误
"empty range in char class : /[\x0600-\x06ff]/".
我只是想检查,如果一个角色落在正则表达式的范围。如果是这样,然后分开。
我想分割不是ASCII格式的字符,即UTF-8。 我写这行代码Ruby中非ASCII字符范围检查的正则表达式
result = string.scan(/[\x0600-\x06ff]/)
不知怎么就不能正常工作,并给出错误
"empty range in char class : /[\x0600-\x06ff]/".
我只是想检查,如果一个角色落在正则表达式的范围。如果是这样,然后分开。
红宝石不支持Unicode令牌在它的正则表达式执行的(或我使用RegexBuddy告诉我的谎言)
如果我尝试\u0000
我得到的说,这是不支持的错误。
如果你的Ruby版本不支持它,范围为[\u0000-\uFFFF]
你可以尝试使用POSIX类[^[:ascii:]]
匹配一切非ASCII。
您也可以尝试[^\x00-\xFF]
以匹配没有小数值0-255的所有内容。
'\ uHHHH'用于指定Unicode的十六进制值,但对于':ascii:'指定Unicode。 –
你的问题是你错误地使用了\x
。 \xHH
指定十六进制为HH
的字节。这意味着,\x0600
实际上是\x06
,0
,并且0
和你的整个人物类是什么样子(用空格部分分开):
\x06 0 0-\x06 f f
,唯一的范围是0-\x06
这不是你想要的。如果你想通过十六进制值,以指定的Unicode,那么你要使用\u
:
/[\u0600-\u06ff]/
而且,你的范围错过了很多非ASCII值(如'µ'
这是\u00b5
),你会更好off使用Vasili's/[^[:ascii:]]/
POSIX命名字符类或/[^\p{ASCII}]/
。
我想要这个来计算Unicode字符的数量 但是这个正则表达式不起作用,它总是在其他部分。你能发现问题吗? '如果unicode.match(/ [\ u0600- \ u06ff] /) unicodeChars + = 1个 否则 asciiChars + = 1个 end' – ZeeAzmat
是什么'unicode'样子?为什么不使用Vasili的'[^ [:ascii:]]'正则表达式呢?你的0x0600到0x06ff范围没有找到合适的位(例如''μ''这是'\ u00b5'。 –
在上面的代码中** unicode有4位十六进制数**,我之所以没有使用[^ [ ascii:]]是我必须检查多少文件是在** urdu **和多少是英文。所以为了检查我必须比较给定范围内的每个字符。因为有很多其他unicode字符。如果我使用[^ [:ascii:]]作为正则表达式,那么除了urdu之外的其他unicode字符也会在count中存在。所以**乌尔都语**字符unicode范围是从0600-06ff – ZeeAzmat
我不能使用它,因为我必须**检查字符是否落在给定范围内**。如果是,然后分割它。 – ZeeAzmat
我的任务不是检查每个非ASCII字符。 我想检查的范围在问题0600-06ff – ZeeAzmat