Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 正则表达式错误:指定的多字节代码范围太多_Ruby_Regex_Utf 8_Character Encoding_Ruby 1.9 - Fatal编程技术网

Ruby 正则表达式错误:指定的多字节代码范围太多

Ruby 正则表达式错误:指定的多字节代码范围太多,ruby,regex,utf-8,character-encoding,ruby-1.9,Ruby,Regex,Utf 8,Character Encoding,Ruby 1.9,我有一个正则表达式,需要匹配一组字符。代码在ruby 1.8.7中没有问题,但在1.9中它杀死了所有的人。我想这与编码有关,我已经做了大量的谷歌搜索,所以也许有人能给我一些启发 代码: 错误: ~/Desktop: ruby regex_test.rb regex_test.rb:13:in `<main>': too many multibyte code ranges are specified: /[a-z_가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟갠갡

我有一个正则表达式,需要匹配一组字符。代码在ruby 1.8.7中没有问题,但在1.9中它杀死了所有的人。我想这与编码有关,我已经做了大量的谷歌搜索,所以也许有人能给我一些启发

代码:

错误:

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

这是正则表达式中10000多字节的限制

您需要更改ONIG\u MAX\u MULTI\u BYTE\u RANGES\u NUM配置参数(/ruby-1.9.2-p*/include/ruby/oniguruma.h):


然后重新编译ruby。

正如twehad所指出的,regexp中有10k的限制

在任何情况下,您都应该在Regexp中使用unicode范围:

/[a-z_\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF]/io
我不是韩语专家,所以我不知道它是否等效,但如果您想匹配所有韩语字符,则应使用该类:

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

我认为这是最实际的解决方案。将单个范围拆分为单独的正则表达式检查,并加入一个
|
将是我的第二选择。按最可能遇到的测试顺序排序可能会带来一些速度。你是说“它会停止”,而不是“它会停止”?
/[a-z_\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF]/io
/[a-z_\p{Hangul}]/io