Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2007, 23h52   #1
Membre à l'essai
 
Développeur multimédia
Inscription : septembre 2007
Messages : 25
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : septembre 2007
Messages : 25
Points : 21
Points : 21
Envoyer un message via MSN à Lo-chan
Par défaut Trouver une adresse e-mail dans un texte

Bonsoir,

J'avais un problème avec les regex pour trouver une URL (voir ici). Voilà que j'en ai encore un avec une recherche de mail... Je comprend pas. Pourtant, j'avais fini par comprendre mon erreur avec les URL mais bon.

Voilà donc ma fonction de regex :

Code :
1
2
3
4
5
6
7
8
9
10
11
function replaceMail($theText)
{
	$expreg = "`"; // Début de ligne
	$expreg .= "([a-zA-Z0-9]\._-)+"; // L'utilisateur, peut comporter un "_", ".", "-", obligatoire au moins une lettre
	$expreg .= "@"; // L'arobase, obligatoire
	$expreg .= "(([a-zA-Z0-9])*\.)+"; // Le domaine ou sous-domaine, alphanum, présent au moins une fois
	$expreg .= "[a-zA-Z]{2,4}"; // l'extention, mini 2 et maxi 3 caractères
	$expreg .= "`"; // Fin de ligne
 
	return preg_replace($expreg, "¤Mail¤", $theText);
}
Voici le résultat :

Citation:
truc@machin.com --> truc@¤Mail¤
truc-truc@machin.com --> truc-truc@¤Mail¤
D'après le résultat, je comprends bien qu'il y a un problème soit au niveau de l'utilisateur soit au niveau de l'arobase. J'ai donc essayé d'enlevé les point, underscore et tiret, mais ça change rien, même résultat. Au niveau de l'arobase, je sais pas quoi faire de plus.

Quelqu'un pourrait me dire ce que j'ai mal fait et me l'expliquer ? Merci d'avance.
Lo-chan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 09h37   #2
Membre chevronné
 
Inscription : mars 2002
Messages : 611
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mars 2002
Messages : 611
Points : 764
Points : 764
En voilà une qui fonctionne :

Code :
[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}
Essaye de comparer pour voir ce qui cloche dans la tienne.
DelphiManiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 15h08   #3
Membre à l'essai
 
Développeur multimédia
Inscription : septembre 2007
Messages : 25
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : septembre 2007
Messages : 25
Points : 21
Points : 21
Envoyer un message via MSN à Lo-chan
Bon j'ai compris... En fait il n'y a aucune erreur !!!

Le seul truc qui n'allait pas c'est que j'appelais la fonction qui recherche les URL avant celle qui recherche les mails. Comme un mail comporte une url simple (domaine.extention) ben il rechercher un domaine dans les mails... Donc il suffisait simplement de rechercher et de remplacer les mails avant de rechercher et de remplacer les URL.
Lo-chan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 14h55   #4
Invité de passage
 
Inscription : octobre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 2
Points : 2
Points : 2
Salut et merci deja pour tes 2 posts !!!

j'ai besoin d'un truc un peu chiant et j'y connais vraiment rien en regexp

j'aimerai d'apres une chaine : "fiuhreiufhreiuhfrei ufirefieu fier if rei fire fire fire fire frie www.google.fr reif hrei iyfi gez iu coucou@free.fr fç rfàç rfe àçfreç frç fre çfrfr "

en extraire 2 données :

www.google.fr en <a href="www.google.fr">www.google.fr</a>
et
coucou@free.fr en <a href="mailto:coucou@free.fr">coucou@free.fr</a>

d'avance merci à tous !!!
Julien
info2c est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 17h52   #5
Membre à l'essai
 
Développeur multimédia
Inscription : septembre 2007
Messages : 25
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : septembre 2007
Messages : 25
Points : 21
Points : 21
Envoyer un message via MSN à Lo-chan
Euh tu veux replacer ou extraire ? Dans les deux cas, si tu relies les deux posts (celui ci et celui dont je parle en tout premier message), tu trouveras ta réponse. Perso je dirai de matter en priorité l'autre topic.
Lo-chan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 18h02   #6
Invité de passage
 
Inscription : octobre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 2
Points : 2
Points : 2
Merci beaucoup mais j'ai essayé et j'y arrive pas, j'y connais rien !!

je cherche à remplacer !
Merci
Julien
info2c est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 12h07   #7
Membre à l'essai
 
Développeur multimédia
Inscription : septembre 2007
Messages : 25
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : septembre 2007
Messages : 25
Points : 21
Points : 21
Envoyer un message via MSN à Lo-chan
Voilà le post précis donnant une fonction pour remplacer les URL par les mêmes URL mais avec une balise <a> créant ainsi un lien :

http://www.developpez.net/forums/sho...60&postcount=8

Pour les mails, tu refais une autre fonction en plus de celle là, en changeant la regex pour qu'elle cible les mails. Pour le lien, faut penser que c'est un mailto à mettre dans la balise <a>. Voilà ce que ca devrait donner :

Code :
1
2
3
4
5
6
7
8
9
10
11
function replaceMail($theText)
{
	$expreg = "`"; // Début de ligne
	$expreg .= "([a-zA-Z0-9]\._-)+"; // L'utilisateur, peut comporter un "_", ".", "-", obligatoire au moins une lettre
	$expreg .= "@"; // L'arobase, obligatoire
	$expreg .= "(([a-zA-Z0-9])*\.)+"; // Le domaine ou sous-domaine, alphanum, présent au moins une fois
	$expreg .= "[a-zA-Z]{2,4}"; // l'extention, mini 2 et maxi 3 caractères
	$expreg .= "`"; // Fin de ligne
 
	return preg_replace($expreg, "<a href='mailto:".$0."' target='_blank'>".$0."</a>", $theText);
}
Ah par contre, je viens de me rendre compte que je n'ai pas expliqué la variable "$0", c'est en fait le morceau de chaîne de caractère qui a été détecté par la fonction preg_replace(...). Autrement dit, la ou les URL quand on cherche une URL sinon le ou les mails quand on cherche un mail.
Lo-chan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h23.


 
 
 
 
Partenaires

Hébergement Web