RegexpError:regexp匹配器中的堆栈溢出

时间:2010-10-28 20:15:38

标签: ruby regex

我对一个简单的标记化器正则表达式有一个小问题:

def test_tokenizer_regex_limit
   string = '<p>a</p>' * 400
   tokens = string.scan(/(<\s*tag:.*?\/?>)|((?:[^<]|\<(?!\s*tag:.*?\/?>))+)/)
end

基本上它贯穿整个文本并获得[matched_tag,other_text]对。这是一个例子:http://rubular.com/r/f88JBjfzFh

适用于较小的套装。如果你在红宝石1.8.7下跑,它会爆炸。 1.9.2工作正常。

如何简化/改进这一点?我的正则表达很弱

1 个答案:

答案 0 :(得分:0)

这有点简化但不多:

(<[^<]*:[^<]*>)|((?:[^<]|<[^:]*>)+)

<击>(小于* GT; |。?[^&LT;&GT;] +)