我想分割不是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