Я хотел бы reg exp, который может взять блок строки, и найти строки, соответствующие формату:
<a href="mailto:x@x.com">....</a>
И для всех строк, соответствующих этому формату, он будет извлекать адрес электронной почты, найденный после mailto:
Есть предположения?
Это необходимо для внутреннего приложения, а не для каких-либо спамерских целей!
Если вы хотите соответствовать всему:
$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>(.*?)\<\/a\>`ism'; preg_match_all($r,$html, $matches, PREG_SET_ORDER);
К фазе и шортеру это:
$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>`ism'; preg_match_all($r,$html, $matches, PREG_SET_ORDER);
Вторая соответствующая группа будет независимо от ее электронной почты.
Пример:
$html ='<div><a href="mailto:test@live.com">test</a></div>'; $r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>(.*?)\<\/a\>`ism'; preg_match_all($r,$html, $matches, PREG_SET_ORDER); var_dump($matches);
Вывод:
array(1) { [0]=> array(5) { [0]=> string(39) "test" [1]=> string(1) " " [2]=> string(13) "test@live.com" [3]=> string(0) "" [4]=> string(4) "test" } }
На regexp.info есть много разных опций
Один из примеров:
\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[AZ]{2,4}\b
« mailto:
» тривиально, чтобы добавить к этому.
/(mailto:)(.+)(\")/
Вторая соответствующая группа будет адресом электронной почты.
Вы можете работать с внутренним PHP-фильтром http://us3.php.net/manual/en/book.filter.php
(у них есть тот, который специально предназначен для проверки или дезинфекции электронной почты -> FILTER_VALIDATE_EMAIL)
поздравил