Обработка регулярного выражения с помощью java.util.regex
приводит к переполнению стека для больших строк и сложного регулярного выражения (особенно с |
).Java regex parser без переполнения стека
Есть ли способ обработки регулярных выражений более оборонительны в Java, как
- имеющие нерекурсивный режим для регулярного выражения
- бросающего catchable исключения для тех регулярных выражений (вместо java.lang .Stackoverflow error),
или любой другой механизм, который не убивает мою программу или не переносит ее в состояние, не подлежащее восстановлению?
Я советую вам упростить регулярное выражение, вместо того, чтобы найти решение для ошибки переполнения стека. – Maroun
Правда, это часто бывает разумно. Но на самом деле раздражает появление регулярного выражения, пусть оно проходит все модульные тесты, помещает их в большую программу анализа, чтобы увидеть, как он сбой в 2 утра, потому что некоторая входная строка была действительно большой. –
Этот ответ был дан ответ несколько раз. Реализовать некоторый механизм тайм-аута: http://stackoverflow.com/questions/910740/cancelling-a-long-running-regex-match –