Ошибка регулярного выражения: слишком много диапазонов многобайтового кода - PullRequest
3 голосов
/ 03 июля 2011

У меня есть регулярное выражение, которое должно соответствовать группе символов. В коде нет проблем, это ruby ​​1.8.7, но в 1.9 он убивает. Я предполагаю, что это связано с кодировкой, я проделал большую часть поисков в Google, так что, возможно, кто-то может просветить меня.

Код:

# encoding: utf-8
non_latin_hashtag_chars = [
  (0xA960..0xA97F).to_a, # Hangul Jamo Extended-A
  (0xAC00..0xD7AF).to_a, # Hangul Syllables
  (0xD7B0..0xD7FF).to_a  # Hangul Jamo Extended-B
].flatten.pack('U*').freeze

e = /[a-z_#{non_latin_hashtag_chars}]/io

Ошибка:

~/Desktop: ruby regex_test.rb 
regex_test.rb:13:in `<main>': too many multibyte code ranges are specified: /[a-z_가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍......

Ответы [ 2 ]

7 голосов
/ 03 июля 2011

Как указывает twehad, в регулярном выражении есть ограничение в 10 КБ.

В любом случае вы должны использовать диапазоны Юникода в регулярном выражении:

/[a-z_\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF]/io

Я неэксперт по корейскому языку, так что я не знаю, эквивалентен ли он, но если вы хотите сопоставить все символы хангыль, вы должны использовать вместо этого класс:

/[a-z_\p{Hangul}]/io
4 голосов
/ 03 июля 2011

Это ограничение 10000 многобайтовых символов в регулярном выражении.

Вам необходимо изменить параметры конфигурации ONIG_MAX_MULTI_BYTE_RANGES_NUM (/ruby-1.9.2-p*/include/ruby/oniguruma.h):

#define ONIG_MAX_MULTI_BYTE_RANGES_NUM     10000

и затем перекомпилировать ruby.

...