2009-09-03 10 views
1

Je voudrais un reg exp qui peut prendre un bloc de chaîne, et trouver les chaînes correspondant au format suivant:Regexp pour extraire un mailto: adresse

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

Et pour toutes les chaînes qui correspondent à ce format, il va extraire l'adresse e-mail trouvée après le mailto:. Des pensées?

Ceci est nécessaire pour une application interne et non pour les spammeurs!

Répondre

3

Si vous voulez faire correspondre l'ensemble chose:

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

Pour fastern et shortern il:

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

Le deuxième groupe correspondant sera quel que soit l'email.

Exemple:

$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); 

Sortie:

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

Il y a beaucoup d'options différentes sur regexp.info

Un exemple serait:

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

Le "mailto:" est trivial préfixer à cela.

+0

Cette expression régulière correspond uniquement lettres majuscules alors assurez-vous d'utiliser un drapeau de la casse avec celui-ci. Vous pouvez également ajouter une lettre minuscule à l'expression régulière. – Asaph

+0

pouvez-vous ajouter le mailto: ainsi que le commutateur d'insensibilité d'asaph a soulevé? Je ne suis pas familier avec la syntaxe regexp donc je ne peux pas le réparer moi-même, même si son trivial –

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

Le deuxième groupe correspondant sera l'adresse électronique.

+0

quelle fonction devrais-je utiliser avec ceci, preg_match? –

0

Vous pouvez travailler avec le filtre interne de PHP http://us3.php.net/manual/en/book.filter.php

(ils ont un qui est spécialement là pour email valider ou désinfectante -> FILTER_VALIDATE_EMAIL)

Salue

+0

Comment cela permettrait-il d'extraire l'email? –