В Python регулярных выражений,Regular Expression Пайтона Источник Длина строки
re.compile("x"*50000)
дает мне OverflowError: regular expression code size limit exceeded
но после один не получает какую-либо ошибку, но она попадает 100% CPU, и занимает 1 минуту в моей ПК
>>> re.compile(".*?.*?.*?.*?.*?.*?.*?.*?.*?.*?"*50000)
<_sre.SRE_Pattern object at 0x03FB0020>
Это нормально?
Должен ли я предположить, ".*?.*?.*?.*?.*?.*?.*?.*?.*?.*?"*50000
короче "x"*50000
?
Испытано на Python 2.6, Win32
UPDATE 1:
Похоже, ".*?.*?.*?.*?.*?.*?.*?.*?.*?.*?"*50000
можно свести к .*?
Итак, как насчет этого?
re.compile(".*?x"*50000)
Он компилируется, и если один может также свести к ".*?x"
, он должен соответствовать нанизывать "abcx"
или "x"
в одиночку, но это не соответствует.
Итак, я что-то упустил?
UPDATE 2:
Моя точка не знать максимальный предел регулярных выражений строк источника, я хотел бы знать некоторые причины/концепция "x"*50000
пойманного обработчика переполнения, но не на ".*?x"*50000
.
Это не имеет смысла для меня, вот почему.
Это что-то не хватает при проверке переполнения или его просто отлично или что-то действительно переполнено?
Любые советы/мнения будут оценены.
Нет ". *? X" * 5000 не уменьшается до ". *? X" - он сводится к регулярному выражению с 5000 x в, с ". *?" перед каждым x. Вот почему он не соответствует «abcx» или «x» - он будет соответствовать только строке с 5000 x. –
Это напоминает мне, что я ударил максимальную длину PHP для регулярных выражений, когда я попытался преобразовать ABNF для путей SVG в regexp. Итак, ИМХО, ответ был бы полезен. – Boldewyn
@Dave Kirby, спасибо, но его 50000 (50k). Мои исходные вопросы: 're.compile (« x »* 50000)' не компилируется, но 're.compile (". *? X "* 50000)' компилируется. – YOU