Ошибка в регулярных выражениях Yii2 (Kohana) в PHP7.3 и выше
При отладке старого приложения наYii2 или Kohana можно встретить такую ошибку:
yiibaseErrorException: preg_match(): Compilation failed:
invalid range in character class at offset 376 in .../vendor/yiisoft/yii2/web/UrlRule.php
Вывод что что-то нетак сроутами вконфигах.
Если отследить скакими конкретно роутами происходит проблема, оказалось:
preg_match('/[w-.]+/', ''); // Этот код дает ошибку в PHP версии 7.3 и выше
preg_match('/[w\-.]+/', ''); // Если экранировать дефис-всебудетОк
Дело втом, что в язвке программирования PHP7.3 и выше обновилась методика обработки регулярных выражений сPCRE наPCRE2. Вот выдержка изсписка обновлений PHP7.3:
With
PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL
set, escape sequences such as\s
which are valid incharacter classes, but not asthe end ofranges, were being treated asliterals. Anexample is[_-\s]
(but not[\s-_]
because that gave anerror atthestartofarange). Now an«invalid range» error isgiven independently ofPCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL
.
348
раз уже помогла