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 02/10/2006, 19h17   #1
Membre du Club
 
Inscription : juin 2005
Messages : 116
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 116
Points : 40
Points : 40
Envoyer un message via MSN à TheRedLed
Par défaut utilisation de ereg_replace

hello

Voila j'ai lu qqs docs des expressions rationnelles mais j'y capte rien pour mon problème

Voila j'ai une URL de ce genre : page.php?nom=guch&id=45&ville=nantes
je voudrais changer le paramètre id avec ereg_replace (ou une fonction du style)
-> pour obtenir : page.php?nom=guch&id=21&ville=nantes
donc je voudrais chercher "id=" et changer la valeur entre "id=" et le ["&" ou fin de ligne] qui suit.

Comment ?
Merci
TheRedLed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2006, 19h45   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Code :
1
2
3
4
5
6
7
 
<?php
$lien_in = 'page.php?nom=guch&id=45&ville=nantes';
$nouv_id = '21';
$lien_out = preg_replace('#id=[0-9]+(&|$)#', "id=$nouv_id$1", $lien_in);
echo $lien_out;
?>
?


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2006, 19h47   #3
Membre régulier
 
Inscription : décembre 2005
Messages : 225
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 225
Points : 76
Points : 76
Utilise les PCRE ( preg ) et pas les POSIX ( ereg ) , car ces dérniéres sont très lentes !
Voilà la regex à utiliser avec preg_replace ( la même syntaxe que ereg_replace ) :
Code :
$nouvelle_url=preg_replace('#(id=)[0-9]+#','$121',$ancienne_url);
__________________
Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

( le développement de littlefoot86 est abandonné ... )
bouazza92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2006, 19h48   #4
Membre régulier
 
Inscription : décembre 2005
Messages : 225
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 225
Points : 76
Points : 76
Lol 2 minutes de retard :p
__________________
Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

( le développement de littlefoot86 est abandonné ... )
bouazza92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2006, 10h09   #5
Membre du Club
 
Inscription : juin 2005
Messages : 116
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 116
Points : 40
Points : 40
Envoyer un message via MSN à TheRedLed
merci bien !

le # ça veut dire "n'importe quoi" ?
que veut dire le '$1' ou '$121' dans la chaine remplacante ?
il ne faut pas échapper le "=" ??
TheRedLed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2006, 11h17   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par TheRedLed
le # ça veut dire "n'importe quoi" ?
C'est le délimiteur de l'expression régulière, marquant son début et sa fin. On aurait pu choisir un autre caractère comme £ par exemple., mais il ne faut pas utiliser des caractères que l'on peut rencontrer dans l'expression régulière (parenthèses, crochets, ...).
Citation:
Envoyé par TheRedLed
que veut dire le '$1' ou '$121' dans la chaine remplacante ?
$1 correspond à la chaîne capturée par la première parenthèse (capturante), donc ici la valeur numérique de la variable id dans l'URL.
Citation:
Envoyé par TheRedLed
il ne faut pas échapper le "=" ??
Non car il ne fait ni partie du délimiteur ni des métacaractères (caractères ayant une signification dans une expression régulière comme +, *, ., ... - voir la documentation de la fonction preg_quote pour une liste complète).


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2006, 11h28   #7
Membre du Club
 
Inscription : juin 2005
Messages : 116
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 116
Points : 40
Points : 40
Envoyer un message via MSN à TheRedLed
Merci pour tout, cela dit après lecture de doc, j'ai changé le truc en :

Code :
1
2
3
$url = "page.php?ou=yo&id=78";
$val = 21;
preg_replace('`id=(.*?)($|&)`', 'id='.$val.'$2', $url);
(en fait la variable id peut contenir des lettres, c'est pour une fonction générique de modification d'url)
en fait '`' ou '#' c'est arbitraire non, j'aurais pu mettre 'a' aussi ?

pas trop compris mon '(.*?)' par contre je l'ai copié bêtement et ça marche..
TheRedLed 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 22h32.


 
 
 
 
Partenaires

Hébergement Web