У меня есть регулярное выражение, которое ищет адреса электронной почты (это было взято из другого поста SO, который я не могу найти и был протестирован на всех видах конфигураций электронной почты ... изменение этого не совсем мой вопрос ... но поймите, если это первопричина):
/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i
Я использую preg_match_all() в PHP.
Это отлично работает для 99.99...% файлов, в которых я ищу, и занимает около 5 мс, но иногда занимает пару минут. Эти файлы больше, чем средняя веб-страница, около 300k, но гораздо большие файлы обычно обрабатываются нормально. Единственное, что я могу найти в содержимом файлов, которое выделяется, это строки из тысяч последовательных "случайных" буквенно-цифровых символов, таких как:
wEPDwUKMTk0ODI3Nzk5MQ9kFgICAw9kFgYCAQ8WAh4H...
Вот две страницы, вызывающие проблему. Просмотрите источник, чтобы увидеть длинные строки.
Есть мысли о том, что является причиной этого?
--ОБЩИЕ РЕШЕНИЯ--
Я протестировал различные регексы, предложенные в ответах. Ответ @FailedDev помог и сократил время обработки с нескольких минут до нескольких секунд. Ответ @hakre решил проблему и сократил время обработки до нескольких сотен миллисекунд. Ниже приведен окончательный вариант regex, который я использовал. Это второе предложение @hakre.
/[a-z0-9_\-\+]{1,256}+@[a-z0-9\-]{1,256}+\.([a-z]{2,3})(?:\.[a-z]{2})?/i