2011-07-03 9 views
3

私は正規表現を持っています。コードはruby 1.8.7でも問題ありませんが、1.9ではそれが終わります。私はそれがエンコーディングと関係があると思う、私はグーグル検索の良い塊をしたので多分誰かが私を啓発することができます。正規表現エラー:多バイトコード範囲があまりにも多く指定されています

コード:

# 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_가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍...... 
+0

「それは殺さない」という意味ですか? –

答えて

6

twehadが指摘するように、正規表現には10kの制限があります。どんな場合でも

、あなたは正規表現の中にUnicodeの範囲を使用する必要があります。

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

私はそれが同等であれば、私は知らないが、あなたはすべてハングルを一致させたい場合は、韓国の専門家ではありませんよ文字を使用する場合は、代わりにそのクラスを使用する必要があります。

/[a-z_\p{Hangul}]/io 
+0

これは最も実用的なソリューションだと思います。個々の範囲を '|| 'で結合された別々の正規表現チェックに分割することは、私の第2の選択肢になります。遭遇する可能性が最も低い可能性が最も高い試験を注文するには、いくらかのスピードを買うかもしれません。 –

4

これは正規表現には限界10000マルチバイトсharがあります。

あなたはONIG_MAX_MULTI_BYTE_RANGES_NUM設定パラメータ(/ruby-1.9.2-p*/include/ruby/oniguruma.h)を変更する必要があります。その後、

#define ONIG_MAX_MULTI_BYTE_RANGES_NUM  10000 

とルビーを再コンパイルします。

関連する問題