Движок "Конечных автоматов" повисает на регексе - PHP движок справляется
Именно что повисает, а не выдает ошибку - мол автомат слишком сложный. Регекс (в расширенной нотации) \s (?###parens_opt<) res (?###>) \s=\s (?###parens_opt<) (?###parens_opt<) (?###parens_opt<) str (?###>) \s[\s (?###parens_opt<) 0+ (?###>) \s] (?###>) \s.\sisDigit\s(\s) (?###>) \s;+\s
Тестовые строки res = str[0].isDigit(); (res) = (( (str)[(0)]).isDigit()); ( ( res ) ) = ( ( ( ( ( str ) ) [ ( ( 0 ) ) ] ) . isDigit ( ) ) ) ;
Валерий - посмотрите пожалуйста в чем там дело, дефолты для сложности регексов левые или что-то другое происходит....
Comments (5)
-
reporter -
reporter Еще раз ошибочный регекс чтобы конкретно
\s* (?###parens_opt<) res (?###>) \s*=\s* (?###parens_opt<) (?###parens_opt<) (?###parens_opt<) str (?###>) \s*\[\s* (?###parens_opt<) 0+ (?###>) \s*\] (?###>) \s*\.\s*isDigit\s*\(\s*\) (?###>) \s*;+\s*
-
reporter О, а теперь работает - только притормаживает конкретно.... Странности какие-то.
-
Автомат большой и там много рекурсии, и ещё parens_opt работает медленнее чем parens_req. Посмотрите на states/transitions limits и меньше сделайте если всё еще тормозит. Обратных ссылок в регексе нет, и быстрый метод матчинга уже никак не оптимизируешь.
-
reporter Все еще актуально
- Log in to comment
А вот такой регекс работает