Регулярное выражение для подстановки mailto: PHP
Привет.
Не могу разобраться с регуляркой. Ее задача - парсить текст и заменять попавшиеся email адреса ссылками mailto:
$text = preg_replace("#(^|[\n ])([\w0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#iu", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $text);
Все работает, только когда перед адресом есть какие-нибудь символы. Например:
test@test.com - не работает.
test test@test.com - работает.
UPD: Дело оказалось в том, что предварительный фильтр строки добавляет в нее <p>
вначале. Я не очень силен в регулярках, поэтому дополнительно поинтересуюсь, является ли такое решение проблемы нормальным:
(^|>|[\n ])([\w0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)
Источник: Stack Overflow на русском