[PHP] Expressions régulières, comment ça marche?

Expressions régulières, comment ça marche? [PHP] - Programmation

Marsh Posté le 21-10-2001 à 15:04:12    

voilà j'aimerais faire une petite fonction
qui transforme <a href=unsite.com> en <a href=unsite.com target=_blank classe=page>.(unsite peut avoir plusieurs valeur)
Je crois qu'on peut faire ça avec les expressions régulières mais je comprends pas comment ça marche.
Qqun peut m'aider?

Reply

Marsh Posté le 21-10-2001 à 15:04:12   

Reply

Marsh Posté le 21-10-2001 à 17:52:44    

moi je ferai un  
$chaine = "<a href=unsite.com>";
ereg_replace(".com",".com target=_blank classe=page", $chaine);
 
pas la peine d'utiliser des expressions régulières


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 21-10-2001 à 18:12:41    

mais si c .fr ou .com ou .net
je fais comment???

Reply

Marsh Posté le 21-10-2001 à 18:15:19    

ah ok dans ce cas, i lfaut passer par des expression régulières et recensées toutes les possibilités d'extension


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 21-10-2001 à 18:59:56    

* ça ne sert à rien de passer par ereg_replace dans le cas de zorglub, str_replace est plus rapide et prévu pour.
 
* bon, un petit topo sur les regexp, ça va me rafraîchir la mémoire ... on va prendre un format fixe d'url histoire de simplifier:
<a href='http://www.url.com'>  
à remplacer par
<a href='http://www.url.com' target='_blank' class='page'>  
 
on utilise ereg_replace et on va faire simple. on va décomposer l'url en morceaux et insérer target='_blank' et class='page' au bon endroit.
ereg_replace prend 3 paramètres : l'expression régulière à rechercher, ce par quoi la remplacer, et la string à traiter. elle renvoit la string traitée.
 
on peut indiquer les 'morceaux' dans le premier paramètre et s'en servir dans le second. ici, les morceaux à trouver sont, dans l'ordre :
1) <a href='http://
2) l'url en elle-même
3) '>
on indique ces morceaux entre parenthèses et on les utilise dans la string de remplacement (second paramètre).
 
par ex,
 
ereg_replace("(<a href='http://)", "\\1 début de l'url" )
va remplacer la string en
<a href='http:// début de l'urlwww.url.com'>
dans ce cas, c'est tout simple, on n'utilise aucun caractère de contrôle, on indique juste la string brut de pomme telle qu'on la cherche. : <a href='http://
 
maintenant, on remplace l'url en elle-même. url simple, qui ne peut contenir ici que des lettres, chiffres, ou points.
pour chercher une lettre minuscule : [a-z]
pour chercher une lettre majuscule : [A-Z]
pour chercher un chiffre : [0-9]
pour chercher un point : [.]
pour chercher une lettre majuscule, ou minuscule, ou un chiffre, ou un point : [A-Za-z0-9.]
 
pour chercher 0 ou plusieurs lettres, chiffres, point on utilise '*' :
[A-Za-z0-9.]*
 
donc
 
ereg_replace("(<a href='http://)([A-Za-z0-9.]*)", "\\1\\2 milieu de l'url" )
va remplacer la string par  
 
<a href='http://www.url.com milieu de l'url'>
 
il ne reste plus qu'à identifier le guillement fermant et la balise fermante : pareil, brut de pomme : ('> )
 
ereg_replace("(<a href='http://)([A-Za-z0-9.]*)('> )", "\\1\\2 milieu de l'url\\3" )
va remplacer la string par  
 
<a href='http://www.url.com milieu de l'url'>
 
on a donc correctement identifié la balise.  
le troisième paramètre (\\3) est à gicler dans la string de remplacement. il sert dans la string de recherche à s'assurer qu'on est dans une balise, mais ici on doit :
* fermer l'url, donc rajouter le guillemet
* rajouter le target='_blank'
* fermer la balise
 
donc  
ereg_replace("(<a href='http://)([A-Za-z0-9.]*)('> )", "\\1\\2' target='_blank' class='blah'>" )
 
va remplacer la string par  
 
<a href='http://www.url.com' target='_blank' class='blah'>
 
voilà.
 
à noter que les regexps se comprennent mieux avec un max de pratique ...
 
// edit car qq bourdes ...

 

[edtdd]--Message édité par youdontcare--[/edtdd]

Reply

Marsh Posté le 21-10-2001 à 19:06:08    

youdontcare a écrit a écrit :

* ça ne sert à rien de passer par ereg_replace dans le cas de zorglub, str_replace est plus rapide et prévu pour.  




 
merci pour le tuyau, et pour le topo


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 21-10-2001 à 20:01:56    

merchi

Reply

Marsh Posté le 21-10-2001 à 20:56:10    

youdontcare >
ton truc ça marche avec une url type:
http://www.renault.com
mais pas dans le cas:
http://shivash.multimania.com/Wind [...] u_BSOD.htm
c'est à dire quand on fait un lien vers une page précise.
tu sais comment on fait pour que ça prenne en compte ça.

Reply

Marsh Posté le 21-10-2001 à 21:20:59    

he bien tu rajoutes les caractères possibles de tes url à l'endroit où il checke l'url [a-z & co].

Reply

Marsh Posté le 21-10-2001 à 22:08:20    

Voici un article qui m'a permis d'en apprendre un minimum : http://www.phpbuilder.com/columns/dario19990616.php3 (depuis j'ai tout oublié donc ne comptes pas sur moi!)


---------------
each day I don't die is cheating
Reply

Marsh Posté le 21-10-2001 à 22:08:20   

Reply

Marsh Posté le 21-10-2001 à 22:57:57    

youdontcare a écrit a écrit :

he bien tu rajoutes les caractères possibles de tes url à l'endroit où il checke l'url [a-z & co].  




j'ai du mal à comprendre comment ça marche, tu pourrais pas m'expliquer comment ça marche pour faire cette amélioration?

Reply

Marsh Posté le 21-10-2001 à 23:13:00    

comme je disais précédemment.
 
[a-z] matche une lettre minuscule.
[A-Z] une lettre majuscule.
[0-9] un chiffre.
[.] un point.
[A-Za-z0-9.] matche une lettre minuscule ou majuscule, ou un chiffre, ou un point.
 
donc [A-Za-z0-9./_] matche une lettre minuscule ou majuscule, ou un chiffre, ou un point, ou un slash, ou un underscore.
 
ça résoudra ton url (/windows/ecran_....). par contre je ne connais pas tous les caractères possibles d'une url, donc cherche voir.

Reply

Marsh Posté le 22-10-2001 à 11:05:54    

ok merci

Reply

Marsh Posté le 29-10-2001 à 10:24:33    

je sais c un peu vieux mais  
j'ai trouvé çà qui résume assez bien ;)
 
http://www.asp-php.net/asphp2/fr/t [...] regexp.asp
 
ou là pour javascript
 
http://www.asp-php.net/asphp2/fr/t [...] jvs_07.asp

 

[edtdd]--Message édité par m@nou--[/edtdd]


---------------
Mes photos,Feed-Back HA/V
Reply

Marsh Posté le 29-10-2001 à 11:44:05    

Je préfère preg_replace() :
 

Code :
  1. $link = "<A HREF=http://www.monsitepourri.com>";
  2. $formatedlink = preg_replace("/(^.*?)(\> )/si","\\1 target=_blank classe=page\\2",$link);

Reply

Marsh Posté le 29-10-2001 à 11:48:35    

Dans mon cas on se sert du ">" pour savoir où insérer les trucs en plus.
 
Il ne devrait donc pas y avoir de problème avec des url's "exotiques".

Reply

Marsh Posté le 30-10-2001 à 20:23:17    

Scoubidoo a écrit a écrit :

voilà j'aimerais faire une petite fonction
qui transforme <a href=unsite.com> en <a href=unsite.com target=_blank classe=page>.(unsite peut avoir plusieurs valeur)
Je crois qu'on peut faire ça avec les expressions régulières mais je comprends pas comment ça marche.
Qqun peut m'aider?  




 
moi je ferais  

Code :
  1. $url = 'unsite.com';
  2. $url_complete = "<a href=".$url." target=_blank classe=page>.";

Reply

Marsh Posté le 30-10-2001 à 23:13:56    

Freekill a écrit a écrit :

Dans mon cas on se sert du ">" pour savoir où insérer les trucs en plus.
 
Il ne devrait donc pas y avoir de problème avec des url's "exotiques".  



sympa ça, je connaissais pas. y'a moyen de le faire sans la syntaxe perl ?

Reply

Marsh Posté le 31-10-2001 à 06:15:15    

youdontcare a écrit a écrit :

sympa ça, je connaissais pas. y'a moyen de le faire sans la syntaxe perl ?  




 
Désolé, je suis un "php wannabie".
 
Tout ce que je connais à trait au php, je ne peux donc te répondre concernant Perl?

Reply

Marsh Posté le 15-11-2001 à 13:17:19    

dernière question, j'ai trouvé un aut problème....
comment faire prendre en compte un url contenant & , ? et = pcq kan je les met tel kel , ça me fait un erreur...
Aidez moi!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed