2009-09-03 3 views
1

Я хотел бы рег ехр который может взять блок строки, и найти строки, соответствующие формат:Regexp для извлечения электронной почта: адрес

<a href="mailto:[email protected]">....</a> 

И для всех строк, которые соответствуют этому формату, он выберет адрес электронной почты, найденный после mailto:. Есть предположения?

Это необходимо для внутреннего приложения, а не для любых целей спамера!

ответ

3

Если вы хотите, чтобы соответствовать всем вещь от:

$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>(.*?)\<\/a\>`ism'; 
preg_match_all($r,$html, $matches, PREG_SET_ORDER); 

Для fastern и shortern его:

$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>`ism'; 
preg_match_all($r,$html, $matches, PREG_SET_ORDER); 

Вторая соответствующая группа будет независимо от ее электронной почты.

Пример:

$html ='<div><a href="mailto:[email protected]">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) "[email protected]" 
    [3]=> 
    string(0) "" 
    [4]=> 
    string(4) "test" 
    } 
} 
1

Есть много различных вариантов на regexp.info

Один пример был бы:

\b[A-Z0-9._%+-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b 

"mailto:" тривиальна предварять к этому.

+0

Это регулярное выражение соответствует только заглавные буквы поэтому обязательно использовать флаг случае нечувствительности с этим. В качестве альтернативы рассмотрим добавление строчной буквы в регулярное выражение. – Asaph

+0

Можете ли вы дополнить письмо по электронной почте: а также вызвал ли азаф? Я не знаком с синтаксисом regexp, поэтому я не могу исправить его сам, даже если его тривиальный –

1
/(mailto:)(.+)(\")/ 

Вторая соответствующая группа будет адресом электронной почты.

+0

, какую функцию я должен использовать с этим, preg_match? –

0

Вы можете работать с внутренней PHP фильтром http://us3.php.net/manual/en/book.filter.php

(у них есть один, который специально там для проверки или дезинфицирующих электронной почты -> FILTER_VALIDATE_EMAIL)

Greets

+0

Как это разрешить извлечение электронной почты? –

Смежные вопросы