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 :

remplacer dans une chaine de caractère (cas spécial) [RegEx]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut remplacer dans une chaine de caractère (cas spécial)
    Bonjour,

    voilà je cherche à faire un remplacement particulier en PHP :
    remplacer dans une chaine "/" par ":" sauf dans le cas ou "[/" (le slash est précéder d'un crocher)

    exemple : la chaine "maison [/toto] / titi" devient après transformation "maison [/toto] : titi"

    Merci d'avance

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour, tu peux faire ça avec des expressions régulières, et par exemple la fonction preg_replace.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte = preg_replace('@([^\[]|^)\\\@', '$1:', $texte);

  3. #3
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    Bonjour,
    Dans ton remplacement tu es toujours dans le cas de figure ]/ ? (dans ce cas je pense que tu as la solution)
    Ou bien ce / peut etre précedé d'autre chose ?

    Sohnic

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par sohnic Voir le message
    Bonjour,
    Dans ton remplacement tu es toujours dans le cas de figure ]/ ? (dans ce cas je pense que tu as la solution)
    Ou bien ce / peut etre précedé d'autre chose ?

    Sohnic
    Le slash peut se trouver dans différent endroit de la chaine de caractère. Le seul cas ou il faut l'ignorer (ne pas le remplacer) est quand il est précéder par un crocher ouvrant.

    J'ai tester la methode citer au dessus. Ca ne marche pas :-(

    Merci pour votre aide

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par etage92 Voir le message
    Ca ne marche pas :-(
    Tu pourrais nous en dire plus ?
    Qu'est-ce qui ne marche pas, est-ce que tu as un message d'erreur ?
    Peux-tu nous donner un code minimal qui "ne marche pas" ?

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    Tu pourrais nous en dire plus ?
    Qu'est-ce qui ne marche pas, est-ce que tu as un message d'erreur ?
    Peux-tu nous donner un code minimal qui "ne marche pas" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $cat_path = "[ti]Acheter/Art[/ti]";
    $cat_path = preg_replace('@([^\[]|^)\\\@', '$1:',$cat_path);
    echo $cat_path
    ?>
    cela retourne comme résultat : [ti]Acheter/Art[/ti]
    au lieu de : [ti]Acheter:Art[/ti]

  7. #7
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    En effet, j'avais pas fait attention, ça remplace les \ et pas les /

    Le bonne expression est donc '@([^\[]|^)/@'

  8. #8
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    En effet, j'avais pas fait attention, ça remplace les \ et pas les /

    Le bonne expression est donc '@([^\[]|^)/@'
    C'est vraiment génial.
    Merci beaucoup


  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Points : 41
    Points
    41
    Par défaut
    Bonjour

    On peut utiliser les assertions arrières négatives : (?<!foo)bar trouve bar si pas précédé par foo

    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cat_path = preg_replace('@(?<!\[)/@', ':',$cat_path);

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 4
    Dernier message: 09/03/2008, 15h36
  3. remplacer les cotes dans une chaine de caractère
    Par zut94 dans le forum Langage
    Réponses: 3
    Dernier message: 30/08/2006, 17h38
  4. Réponses: 2
    Dernier message: 05/01/2006, 13h15
  5. Remplacer dans une chaine de caractères à partir de la fin
    Par daddyel dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/01/2006, 11h31

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