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 10/09/2007, 00h54   #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 URL dans un texte / Rendre une URL cliquable

Bonjour les gens !

Alors voilà, je me lance dans les regex. Sauf que là, j'ai un problème. Je souhaite faire une recherche dans un texte qui serait écrit sur le tagboard de mon site. Ca fait maintenant plusieurs heures que je parcours la toile avec mon grand ami google, mais il n'a pu me trouver que des sources pas très intéressante pour moi (en gros, elles fonctionnent pas dans tous les cas que j'ai pu trouver). Malgrès tout, il m'a trouvé un site très intéressant qui m'a appris les regex (http://www.expreg.com). Je vous le recommande au passage.

Bref, ce que je cherche, c'est une personne qui pourrait me dire ce qui ne va pas dans ma regex. Ne dit-on pas qu'un oeil neuf peut trouver les erreurs qui sont sous le nez des programmeurs ? Bref, la voici :

Code :
1
2
3
4
5
6
7
8
$expreg = "`"; // Début de ligne
$expreg .= "((http|news|ftp|https|irc)://)?"; // Le protocole et les "://", présent ou non
$expreg .= "(www\.)?"; // Les 3 W, présent ou non
$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 .= "(/[a-zA-Z0-9])*"; // les dossiers, sous dossier ou nom de fichier, alphanum, absent ou plusieurs
$expreg .= "(\.[a-zA-Z0-9]{2,4})?"; // l'extention de fichier, alphanum, présent ou non
$expreg .= "`"; // Fin de ligne
Je la veux utile dans absolument tous les cas, comme c'est ma première, je l'ai complétement détaillée. Le soucis, c'est que j'ai aucune erreur. La seule chose qui ne va pas, c'est que le texte testé n'est pas réaffiché...

Dernière info, j'utilise une commande PCRE, la voici :

Code :
$message = preg_replace($expreg, "¤URL¤", $message_a_tester);
Voilà, j'espère que quelqu'un pourra me dire ce que j'ai pas vu et sourtout me l'expliquer que je ne reste pas idiote Merci d'avance !
Lo-chan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 12h56   #2
Membre confirmé
 
Avatar de frol
 
Inscription : mars 2005
Messages : 288
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : mars 2005
Messages : 288
Points : 268
Points : 268
Envoyer un message via AIM à frol Envoyer un message via MSN à frol Envoyer un message via Skype™ à frol
j'ai essayé ceci
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
$expreg = "`"; // Début de ligne
$expreg .= "((http|news|ftp|https|irc)://)?"; // Le protocole et les "://", présent ou non
$expreg .= "(www\.)?"; // Les 3 W, présent ou non
$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 .= "(/[a-zA-Z0-9])*"; // les dossiers, sous dossier ou nom de fichier, alphanum, absent ou plusieurs
$expreg .= "(\.[a-zA-Z0-9]{2,4})?"; // l'extention de fichier, alphanum, présent ou non
$expreg .= "`"; // Fin de ligne
 
$message_a_tester = "test http://www.frol.be/test.php";
$message = preg_replace($expreg, "URL", $message_a_tester);
echo $message;
?>
je n'ai pas le même problème que toi c'est a dire que le texte s'affiche mais non correctement formaté, ça me retourne ceci
Code :
test http://wwURL/tesURL
maintenant juste un conseil pour toi mais tu l'as peut être déjà fait, met ceci dans une fonction ce sera plus facilement réutilisable
frol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 13h16   #3
Membre confirmé
 
Avatar de frol
 
Inscription : mars 2005
Messages : 288
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : mars 2005
Messages : 288
Points : 268
Points : 268
Envoyer un message via AIM à frol Envoyer un message via MSN à frol Envoyer un message via Skype™ à frol
voici la fonction qui marche


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/** this method replace one url in theText(param) by "URL"
*@param theText : the text to replace
*@return theText with the urls replaced by "URL"
*/
function replaceUrl($theText){
    $expreg = "`"; // Début de ligne
    $expreg .= "((http|news|ftp|https|irc)://)?"; // Le protocole et les "://", présent ou non
 
    //inutile car www. est un sous-domaine comme les autres
    $expreg .= "(www\.)?"; // Les 3 W, présent ou non
 
    //ici il y avait une erreur a toi de chercher 
    $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
 
    //ici pa obligé d'avoir de sous dossiers et une autre erreur
    $expreg .= "(/([a-zA-Z0-9])*)?"; // les dossiers, sous dossier ou nom de fichier, alphanum, absent ou plusieurs
    $expreg .= "(\.[a-zA-Z0-9]{2,4})?"; // l'extention de fichier, alphanum, présent ou non
    $expreg .= "`"; // Fin de ligne
 
    return preg_replace($expreg, "URL", $theText);
}
frol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 16h41   #4
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
Ca y est !!! Super ta correction !!! Merci bien. Ca m'a bien aider, j'ai tout compris.

Je vais me lancer pour essayer de faire la même chose pour des adresses mails. Maintenant que j'ai compris l'erreur, j'vais y arriver.

Autre chose, l'erreur que tu as eu, j'l'ai eu aussi. Je pense que le soucis qui a causé ça venait de mon erreur, là où je mettait pas les étoiles :

Citation:
test http://wwURL/tesURL
Lo-chan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 17h57   #5
Membre confirmé
 
Avatar de frol
 
Inscription : mars 2005
Messages : 288
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : mars 2005
Messages : 288
Points : 268
Points : 268
Envoyer un message via AIM à frol Envoyer un message via MSN à frol Envoyer un message via Skype™ à frol
en fait tu mettais les étoiles trop tard (voir la fonction correctif que j'ai mise)

donc tu répétais une lettre et un point par exemple mais il fallait répéter plusieurs lettres et un point.

Si tu fais ceci dans le but de remplacer une url par un lien avec l'url tu peux la poster ici ça fera plaisir à beaucoup de personnes
frol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 23h41   #6
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, j'ai pas trop compris ton dernier message frol

Citation:
remplacer une url par un lien avec l'url
Bouh j'ai des pb avec les mails ... J'vais faire un new post.
Lo-chan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 00h14   #7
Membre confirmé
 
Avatar de frol
 
Inscription : mars 2005
Messages : 288
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : mars 2005
Messages : 288
Points : 268
Points : 268
Envoyer un message via AIM à frol Envoyer un message via MSN à frol Envoyer un message via Skype™ à frol
par exemple a la place de
Code :
texte ... http://www.developpez.net/
mettre
Code :
texte ... <a href="http://www.developpez.net/">http://www.developpez.net/</a>
frol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 15h21   #8
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
Oui ok, voilà pour toi :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
function replaceUrl($theText)
{
	$expreg = "`"; // Début de ligne
	$expreg .= "((http|news|ftp|https|irc)://)?"; // Le protocole et les "://", présent ou non
	$expreg .= "(([a-zA-Z0-9_-])*\.)+"; // Les 3 W, 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 .= "(/([a-zA-Z0-9\._-])*)?"; // les dossiers, sous dossier ou nom de fichier, alphanum, absent ou plusieurs
	$expreg .= "(\.[a-zA-Z0-9]{2,4})?"; // l'extention de fichier, alphanum, présent ou non
	$expreg .= "`"; // Fin de ligne
 
	return preg_replace($expreg, "<a href='$0' target='_blank'>$0</a>", $theText);
}
Donc voilà la version finale de ma regex pour trouver les URL et en même temps, elle prermet de rendre une URL cliquable.
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 09h57.


 
 
 
 
Partenaires

Hébergement Web