Как я могу поймать все почтовые адреса из HTML, но игнорировать адреса, которые являются значениями формы. Например:
<p>Mail: [email protected]</p>
...
<input value="[email protected]">
...
<a href="mailto:[email protected]">Kontakt: <span>[email protected]</span></a>
Мне нужны все адреса, но не адрес из поля ввода (это значение формы).
Для сопоставления адресов у меня есть:
(mailto:|)[a-z0-9_\.\-\+]+@[a-z0-9\-\.]+\.[a-z]{2,}+)
Использование регулярных выражений для разбора HTML не очень хорошая идея. Тем не менее, более простым подходом было бы убрать все электронные письма, которые являются входными значениями, а затем сопоставить все напоминания.
Вот пример использования вашего регулярного выражения для сопоставления электронных писем.
$html = preg_replace("/value=[\"'][a-z0-9_\.\-\+]+@[a-z0-9\-\.]+\.[a-z]{2,}[\"']/", "", $html);
preg_match_all("/[a-z0-9_\.\-\+]+@[a-z0-9\-\.]+\.[a-z]{2,}/", $html, $matches);
var_dump($matches); //will output all emails but the one inside value.
Других решений пока нет …