php preg_match_all убивает страницу по неизвестной причине - PullRequest
0 голосов
/ 26 февраля 2012

Я пытаюсь проверить кучу текста и проверить, есть ли в нем электронные письма ... поэтому я использую следующий код:

if (preg_match_all("/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\\.([a-zA-Z])+([a-zA-Z])+/", $str, $matches)){

}

это будет работать для TEXT_A в Page1

, но когда я захожу на Page2 и пытаюсь проверить снова на TEXT_A, он убьет страницу с ошибкой «Страница загрузки проблемы» ...

если я уберу эту галочку, страница загрузится нормально ... я не понимаю, почему это происходит ...

редактировать: я использую CodeIgniter

1 Ответ

1 голос
/ 18 мая 2012

Я вижу проблему в вашем регулярном выражении, которая может вызвать Катастрофическое возвращение назад .

^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\\.([a-zA-Z])+([a-zA-Z])+
                                       ^^^^^^^^^^^^^^^^^^^^^^

Что вы хотите сопоставить в отмеченной мной области?

Какдолжно ли регулярное выражение знать, к какой букве из второй группы следует применить?

Если у вас есть более длинная последовательность букв, которая может совпадать, регулярному выражению потребуется много шагов, чтобы сопоставить это ==> с вамиУ вас проблемы с производительностью, регулярное выражение просто не заканчивается вовремя!

Я бы сказал, что вы можете просто удалить последнюю группу, и регулярное выражение будет совпадать, но гораздо быстрее.

^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\\.([a-zA-Z])+
...