RegexpError: переполнение стека в сопоставлении регулярных выражений - PullRequest
1 голос
/ 29 октября 2010

У меня небольшая проблема с простым регулярным выражением токенизатора:

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

Прекрасно работает для небольших наборов. Если вы запустите под ruby ​​1.8.7, он взорвется. 1.9.2 отлично работает.

Есть идеи, как это упростить / улучшить? Мое регулярное выражение слабо

1 Ответ

0 голосов
/ 29 октября 2010

Это немного проще, но не намного:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...