/ / Редовен израз за проверка на диапазон за не ASCII символи в Ruby [дубликат] - ruby-on-rails, ruby, regex

Редовен израз за проверка на диапазона за несъществуващи ASCII символи в Ruby [дубликат] - рубинен релси, рубин, регенериране

Искам да разделя знаците, които не са в ASCII формат, т.е. utf-8. Написах този ред код

result = string.scan(/[x0600-x06ff]/)

И някак си не работи и дава грешка

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

Просто искам да проверя дали даден символ попада в обхвата на регулярния израз. Ако е така, тогава го разделете.

Отговори:

3 за отговор № 1

Вашият проблем е, че използвате x неправилно. xHH указва този байт HH в шестнадесетичен. Това означава, че x0600 всъщност е x06, 0, и 0 и целият ви клас знаци изглежда (с интервали за разделяне на частите):

x06 0 0-x06 f f

и единственият диапазон е 0-x06 и това не е това, което искате. Ако искате да укажете Unicode чрез hex стойност, тогава искате да използвате u:

/[u0600-u06ff]/

Освен това, вашият диапазон пропуска много не-ASCII стойности (като например "µ" кое е u00b5), по-добре е да използвате Васили "S /[^[:ascii:]]/ POSIX на име клас знаци или /[^p{ASCII}]/.


1 за отговор № 2

Ruby не поддържа Unicode токени в реализацията на regex (или моят RegexBuddy ми казва лъжи)

Ако се опитам u0000 Получавам грешка, която казва, че не се поддържа.
Ако вашата версия на Ruby го поддържа, диапазонът е [u0000-uFFFF]

Можете да опитате да използвате класа POSIX [^[:ascii:]] да съвпада с всичко, което не е ASCII.
Можете също да опитате [^x00-xFF] да съвпада с всичко, което няма десетична стойност от 0-255.