Expressions régulières, comment ça marche? [PHP] - Programmation
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
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
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]
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
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.
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].
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!)
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?
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.
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]
Marsh Posté le 29-10-2001 à 11:44:05
Je préfère preg_replace() :
Code :
|
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".
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 :
|
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 ?
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?
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!
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?