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 :

Besoin d'aide regex preg_replace [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Besoin d'aide regex preg_replace
    Bonjour à tous,

    Petit problème que je rencontre dans un script php, je parcours tous les fichiers des dossiers d'un répertoire et je voudrais remplacer cette variable $myOldText (qui est une string) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $pattern1 = '/\{l s=\'' . $myOldText . '\'( mod=\'.+\')?( js=1)?\}/U';
    $pattern2 = '/->l\(\'' . $myOldText . '\'(, ?\'(.+)\')?(, ?(.+))?\)/U';
    par une autre string que je récupère $myNewText avec un preg_replace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $FileContent = file_get_contents($FilePath);
    $FileContent = preg_replace($pattern1 , $myNewText , $FileContent);
    $FileContent = preg_replace($pattern2 , $myNewText , $FileContent);
    J'en suis là et je ne sais pas trop comment faire je veux juste changer l'ancien texte par le nouveau dans ce pattern.

    Si quelqu'un à une idée ?

    Merci !

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Tu n'as pas dit précisément quel était le problème, mais je devine déjà où ça peut déraper :
    • $myOldText peut contenir des caractères spéciaux de regexp (notamment le point). Tu dois les échapper. Il n'y a pas à ma connaissance de fonction standard qui fait ça, mais tu peux la coder toi-même, il suffit d'utiliser str_replace. Les caractères spéciaux des regexps sont indiqués ici.
    • file_get_contents renvoie une chaîne. A priori, preg_replace se comporte de manière attendue avec cette chaîne, mais le fichier lui n'est pas modifié. Tu dois utiliser file_put_contents pour réécrire la chaîne modifiée dans le fichier.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci Watilin de ta réponse !

    Finalement j'ai trouvé une solution, j'ai utilisé str_replace comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    str_replace("{l s='" . $myOldText . "'", "{l s='" . addslashes($myNewText) . "'", $FileContent);
    $FileContent = str_replace("->l('" . $myOldText . "'", "->l('" . addslashes($myNewText) . "'", $FileContent);
    et ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file_put_contents($FilePath, $FileContent)
    Encore merci !

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    @Watilin: Si, il y a la fonction preg_quote dont c'est précisément le rôle (on peut même passer en paramètre le délimiteur choisi). On peut aussi encadrer la variable avec \Q....\E dans la pattern pour que les caractères spéciaux ne soient pas interprétés (néanmoins avec cette méthode, le délimiteur reste prioritaire sur le \E, ce dernier étant optionel.)
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Merci ! Je cherchais un truc qui ressemble à preg_escape, je ne pouvais pas trouver
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

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

Discussions similaires

  1. RegEx : besoin d'aide
    Par daishi dans le forum ASP
    Réponses: 2
    Dernier message: 01/10/2008, 12h41
  2. Besoin d'aide pour un regex
    Par chris81 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/09/2008, 14h02
  3. preg_replace besoin d'aide
    Par Teufboy dans le forum Langage
    Réponses: 1
    Dernier message: 20/11/2006, 21h16
  4. [RegEx] Besoin d'aide pour une regex
    Par vallica dans le forum Langage
    Réponses: 3
    Dernier message: 20/09/2006, 08h50
  5. [Regex] besoin d'aide sur des motifs
    Par Oluha dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 25/11/2005, 11h23

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