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 :

remplacement chaine dans fichier regexp [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Par défaut remplacement chaine dans fichier regexp
    Bonjour,

    Je cherche à modifier des liens dans un fichier lorsque je le copie.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    //Copie des pages dans le repertoire brouillons
    $source="../template/".$id_modele."/".$nom_page_templ.".html";
    $dest="../sites/".$id_utilisateur."/".$nom_site."/brouillons/".$nom_page_templ.".html";
    copy($source,$dest);
     
    //Rechercher la chaine 'href="http://www.monsite.fr/sites/unnombre/'
    //Et la remplacer par 'href="http://www.monsite.fr/sites/$id_utilisateur/'
    //RegEXP= 'href="http:\/\/www.monsite.fr\/sites\/[0-9]+/'
    if (!$lefich = fopen("$dest", "r+")) print "Échec<br>";
    else
    {
     while(!feof($lefich))
     {
      $contenu_page_a_modif .= fgets($lefich, 4096); // lecture du contenu de la ligne
     }
    $contenu_page_modifie=preg_replace("href=\"http:\/\/www.monsite.fr\/sites\/[0-9]+/","href=\"http://www.monsite.fr/sites/$id_utilisateur/",$contenu_page_a_modif);
    fputs($lefich, "$contenu_page_modifie"); // on écrit dans le fichier
    }
    fclose($lefich);
    Ca ne marche pas...
    Pourquoi?
    Est ce que ma regexp est bonne?
    Est ce que c'est la bonne méthode pour modifier le contenu de mon fichier?

  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
    Citation Envoyé par calitom
    Est ce que ma regexp est bonne?
    Non ...

    Citation Envoyé par calitom
    Pourquoi?
    ... il manque les délimiteurs et vous devez avoir une erreur en ce sens, je présume.

    Citation Envoyé par calitom
    Est ce que c'est la bonne méthode pour modifier le contenu de mon fichier?
    S'en est une mais on peut faire plus simple (lire le fichier en une fois : file_get_contents, l'écrire directement : file_put_contents).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu_page_modifie = preg_replace('~href="http://www\.monsite\.fr/sites/\d+/~', 'href="http://www.monsite.fr/sites/' . $id_utilisateur . '/', $contenu_page_a_modif);
    Doit être mieux ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Par défaut
    Est ce que file_put_contents ajoute le contenu a la fin du fichier, ou alors est ce que ca remplace le contenu?

    Parce que j'aurais besoin d'une fonction qui remplace le contenu au lieu de l'ajouter a la fin du fichier...

  4. #4
    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
    Comme indiqué dans la documentation, elle écrase par défaut le fichier mais on peut aussi écrire à la fin du fichier en utilisant son troisième paramètre (et la constante FILE_APPEND) ...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Par défaut
    Quelle est la différence entre ces deux regexp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ~href=\"http://www.site.fr/sites/[0-9]+/[a-z0-9-_]+/~
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    href=\"http://www.site.fr/sites/[0-9]+/[a-z0-9-_]+/
    A quoi sert le tilde (~)?

  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
    Les tildes en début et fin de motif servent de délimiteurs. Ces derniers sont nécessaires et requis car vous pourriez ajouter à la fin de l'expression des options (comme i pour l'insensibilité à la casse par exemple). Vous êtes pour ainsi dire (pour ne pas rentrer dans les détails) libres de choisir le caractère délimiteur de votre choix (des dièses ou des backticks feraient tout aussi l'affaire).

    Songez à lire les tutoriels, où ceci y apparaît suffisamment (Initiation aux expressions régulières en PHP).

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

Discussions similaires

  1. Download d'une chaine dans fichier
    Par Chichoulinet dans le forum Ruby on Rails
    Réponses: 6
    Dernier message: 28/08/2008, 10h12
  2. Probleme chaine dans fichier
    Par Tyler Durden dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/03/2008, 11h55
  3. Remplacer Automatiquement dans fichier txt
    Par sami_b dans le forum VBA Access
    Réponses: 19
    Dernier message: 29/01/2008, 15h00
  4. rechercher/remplacer chaine dans fichier txt
    Par C_Mila dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 25/02/2007, 12h06
  5. Batch remplacer \ par \\ dans fichier en paramètre
    Par prodi_64 dans le forum Windows
    Réponses: 1
    Dernier message: 19/02/2007, 14h41

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