2010-08-29 8 views
0

Je dois être en mesure de scinder une chaîne contenant les informations From du courrier électronique. De la chaîne j'ai besoin d'extraire $NAME et $EMAIL ou tout ce qui est disponible.scinder l'e-mail d'une chaîne avec PHP

La chaîne peut être dans les formats suivants:

"Santa Clause" <[email protected]> 

Santa Clause <[email protected]> 

<[email protected]> 
+1

S'il vous plaît ajouter plus d'informations sur ce à quoi une chaîne peut ressembler (dans son intégralité) et quel résultat vous avez besoin. –

+1

La seule astuce que je peux donner avec cette information limitée est d'utiliser une expression régulière avec la fonction preg_match. – Gazler

+0

Désolé, lorsque j'ai posté à l'origine je ne savais pas que mon exemple avait été "nettoyé" par le site. Je pouvais l'obtenir maintenant. – santa

Répondre

1
$string_to_check = '"Santa Clause" <[email protected]>' 
$matches = array(); 
preg_match('/?([^<"]*)"?\s*<(\S*)>/',$string_to_check,$matches); 
$matches[1] //=> Santa Claus 
$matches[2] //=> [email protected] 
+0

$ string_to_check dans la fonction preg_match serait $ string_to_match ici. Aussi, preg_math => preg_match. – Evert

+0

@Evert, merci, je l'ai mis à jour mon code – jigfox

0

Si le séparateur est toujours le même caractère (par exemple, le point-virgule):

$items = explode($separator, $from); 

Sinon, parcourez environ dans les preg_XXX fonctions pour repartition des ficelles a base de regex.

0

Pour l'adresse e-mail, jetez un oeil à http://php.net/manual/en/function.preg-match.php. C'est une fonction qui correspond à une chaîne par rapport à une expression régulière. Here est une introduction courte dans la façon d'utiliser des expressions régulières avec PHP. Si vous voulez faire correspondre le nom aussi, il faudra faire un effort, je vous suggère donc de développer d'abord une expression régulière qui peut extraire une adresse e-mail de votre chaîne puis l'augmenter pour trouver le nom également.

2
preg_match('#(?:"(?<name>[^"]+)"|(?<name>.+))?<(?<email>.+)>#U', $string, $matches); 
echo var_dump($matches); 

preg_match('#(?:"(?<name>[^"]+)"|(?<name>.+))?<(?<email>[^>]+)>#U', $string, $matches); 
echo var_dump($matches); 

Essayez l'une des solutions ci-dessus. Le premier permettra plus de courriels valides, alors que le dernier est plus rapide.

0

Trouvé ceci et cela fonctionne très bien!

$parts = preg_split('/[\'"<>](*[\'"<>])*/', $text, -1, PREG_SPLIT_NO_EMPTY); 
Questions connexes