IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

utilisation de ereg_replace [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    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

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $nouvelle_url=preg_replace('#(id=)[0-9]+#','$121',$ancienne_url);

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Par défaut
    Lol 2 minutes de retard :p

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Par défaut
    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 "=" ??

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    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.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Par défaut
    Merci pour tout, cela dit après lecture de doc, j'ai changé le truc en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] utilisation de Ereg_Replace
    Par Magnat dans le forum Langage
    Réponses: 7
    Dernier message: 14/10/2009, 21h37
  2. [RegEx] Comment utiliser ereg_replace()
    Par benthebest dans le forum Langage
    Réponses: 6
    Dernier message: 23/01/2008, 23h15
  3. [RegEx] Utilisation de ereg_replace
    Par nicerico dans le forum Langage
    Réponses: 3
    Dernier message: 30/08/2007, 15h03
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo