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 14/12/2007, 12h00   #1
Membre confirmé
 
Thomas Gambier
Inscription : avril 2005
Messages : 807
Détails du profil
Informations personnelles :
Nom : Thomas Gambier
Âge : 28
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : avril 2005
Messages : 807
Points : 243
Points : 243
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 :
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?
calitom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 13h17   #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
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 :
$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 ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 16h58   #3
Membre confirmé
 
Thomas Gambier
Inscription : avril 2005
Messages : 807
Détails du profil
Informations personnelles :
Nom : Thomas Gambier
Âge : 28
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : avril 2005
Messages : 807
Points : 243
Points : 243
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...
calitom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 17h20   #4
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
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) ...
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 11h45   #5
Membre confirmé
 
Thomas Gambier
Inscription : avril 2005
Messages : 807
Détails du profil
Informations personnelles :
Nom : Thomas Gambier
Âge : 28
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : avril 2005
Messages : 807
Points : 243
Points : 243
Quelle est la différence entre ces deux regexp:
Code :
1
2
 
~href=\"http://www.site.fr/sites/[0-9]+/[a-z0-9-_]+/~
Code :
1
2
 
href=\"http://www.site.fr/sites/[0-9]+/[a-z0-9-_]+/
A quoi sert le tilde (~)?
calitom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 12h02   #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
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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 12h15   #7
Membre confirmé
 
Thomas Gambier
Inscription : avril 2005
Messages : 807
Détails du profil
Informations personnelles :
Nom : Thomas Gambier
Âge : 28
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : avril 2005
Messages : 807
Points : 243
Points : 243
Ok, merci beaucoup...
Ca marche grace à ce que tu m'as donné...
Je met le code au cas où ca pourrait servir a quelqu'un:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
$source="../template/".$id_modele."/".$nom_page_templ.".html";
$dest="../sites/".$id_utilisateur."/".$nom_site."/brouillons/".$nom_page_templ.".html";
copy($source,$dest);
 
$contenu_page_a_modif=file_get_contents($dest);
$contenu_page_modifie=preg_replace("~href=\"http://www.site.fr/sites/[0-9]+/[a-z0-9-_]+/~","href=\"http://www.site.fr/sites/".$id_utilisateur."/".$nom_site."/",$contenu_page_a_modif);
unlink($dest);
$fp = fopen($dest,"w"); // ouverture du fichier en écriture
fputs($fp, "$contenu_page_modifie"); // on écrit dans le fichier
fclose($fp);
La fonction file_put_contents ne marchait pas, je pense que ca doit etre a cause de la version de php que j'utilise, j'ai donc utiliser fopen et fputs...

Merci encore!
calitom 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 02h43.


 
 
 
 
Partenaires

Hébergement Web