2009-07-08 6 views
1

J'essaie de faire correspondre des courriels d'un de mes propres sites à l'aide d'une expression régulière. En utilisant preg_match_all($pattern,$site,$array) les résultats que je reçois sont en double. Ainsi, par exemple, en utilisant:Utilisation d'expressions régulières

$pattern = '/[\w-][email protected]([\w-]+\.)+[\w-]+/i'; 

Je reçois:

Array 
(
    [0] => [email protected] 
    [1] => [email protected] 
    [2] => [email protected] 
    [3] => [email protected] 
    [4] => [email protected] 
    [5] => [email protected] 
    [6] => [email protected] 
    [7] => [email protected] 
    [8] => [email protected] 
    [9] => [email protected] 
) 

Alors, pourquoi suis-je recevoir des doublons? Est-ce un problème avec mon regex?

La chaîne que je recherche est une URL utilisant la méthode file_get_contents(). J'ai vérifié la chaîne pour m'assurer qu'elle ne tirait pas la page deux fois.

+2

Quelle est la chaîne que vous cherchez? – balpha

+0

Comme ci-dessus, la chaîne aiderait –

Répondre

6

Si vous correspondez au code HTML, vous correspondez probablement à la fois au href de la balise a et au contenu de la balise a.

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

OMG haha ​​vous avez probablement raison! – Graham

+1

essayez d'utiliser /mailto:([\w-][email protected]([\w-]+\.)+[\w-]+)/gi pour obtenir juste la valeur mailto – Josh

2

Si vous avez affaire à un ensemble de données assez petit, vous pouvez simplement jeter le tableau dans array_unique() qui vous vous redonner un tableau avec les doublons supprimés.

+0

Bien sûr, il est probablement préférable de comprendre ce qui se passe mal mais je pensais que je le jetterais là :) –

Questions connexes