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 :

preg_replace : Delimiter must not be alphanumeric [Fait] [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Points : 53
    Points
    53
    Par défaut preg_replace : Delimiter must not be alphanumeric
    Bonjour,
    voila j'utilise la fonction preg_replace pour changer la valeur ou suprimmer un pseudo dans un fichier text.
    Les pseudo du fichier sous la forme pseudo* avant il l'étoile était un | et je pensait que sa venait de l'erreur preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in /mnt/130/sda/4/0/... mais c'est toujours pareil. Je ne comprend pas. Avant j'utilisait ereg_replace mais pour le remplacement avec une chaine vide ca ne fonctionnait pas.

    Voici le bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Modification du fichier text des equiments
    	//Récupération du contenu fichier text
    	$fc = fopen($DossierClient_Path.$infclient['Client'].'/eqp.txt','a');
    	$content = fread($fc,sizeof($fc));
    	fclose($fc);
    	//Remplacement modification de la valeur dans la chaine
    	$content = preg_replace($oldinfo['Designation'], $inf['Designation'],$content);
    	//Sauvegarde du nouveau fichier
    	$fc = fopen($DossierClient_Path.$infclient['Client'].'/eqp.txt','w');
    	fwrite($fc,$content);
    	fclose($fc);
    Et les variables ne contienne pas de backslash ormis l'* ou le | mais il faut que je puisse séparer les pseudos car je récupere le fichier pour faire un listing(je n'est pas d'autre choix)

    Merci
    @ bientot ++

  2. #2
    Expert éminent sénior

    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
    Points : 17 777
    Points
    17 777
    Par défaut
    Le motif, pour les fonctions de l'extension PCRE (preg_*), doit être entouré de ce qu'on appelle un délimiteur. Ce caractère peut être plus ou moins quelconque (il faut éviter les métacaractères et un caractère figurant dans l'expression) et marque le début et la fin de celui-ci car vous avez notamment la possibilité de faire apparaître des options à sa fin.

    Voir : Initiation aux expressions régulières en PHP (paragraphe avant le dernier code de la partie pointée)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Points : 53
    Points
    53
    Par défaut
    Un cinsere et grand merci julp, mais donc si j'ai bien compris, si je rajoute des # ou des / avant et prés les expressions que je cherche, sa devrait marcher??

    Merci encore ++

  4. #4
    Expert éminent sénior

    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
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par blastafarie
    donc si j'ai bien compris, si je rajoute des # ou des / avant et après les expressions que je cherche, ça devrait marcher??
    Oui sauf si votre motif en contient puisqu'il semble être dynamique. Vous pouvez protéger ce caractère en l'échappant (ce que propose la fonction preg_quote mais spécifiez bien son deuxième paramètre).

    Par contre j'ignore ce que vous cherchez précisément à faire mais si votre remplacement n'emploie pas de motifs (ce qui semble être le cas) orientez-vous vers str_replace pour faire un remplacement exact.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Points : 53
    Points
    53
    Par défaut
    Merci, j'ai remplacer preg_replace par str_replace et sa à l'air de fonctionner.
    Mais je ne comprend pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	//Récupération du contenu fichier text
    	$fc = fopen($DossierClient_Path.$infclient['Client'].'/eqp.txt','r');
    	$content = fread($fc,sizeof($fc));
    	fclose($fc);
    aprés ça, $content n'est égale qu'a la 1ere lettre du fichier :s et str_replace me renvoit donc uniquement la premiere lettre, ce qui m'efface le contenu du fichier. Je ne comprennait pourquoi $content était vide avant mais c'est que l'ouvrait en 'a' mais maintenant qu'il s'ouvre en 'r' il devrait le contenu complet du fichier
    Je n'en peu plus, une aprés midi pour changer la valeur d'une chaine contenue dans un fichier

    Et str_replace(search,replace,subject) fonctionne si replace et ""??
    Merci encore julp

  6. #6
    Expert éminent sénior

    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
    Points : 17 777
    Points
    17 777
    Par défaut
    Je pense plutôt que vous vouliez faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$fc = fopen($DossierClient_Path.$infclient['Client'].'/eqp.txt','r');
    	$content = fread($fc, filesize($DossierClient_Path.$infclient['Client'].'/eqp.txt'));
    	fclose($fc);
    Ou encore éventuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$content = file_get_contents($DossierClient_Path.$infclient['Client'].'/eqp.txt');
    A la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$fc = fopen($DossierClient_Path.$infclient['Client'].'/eqp.txt','r');
    	$content = fread($fc, filsize($DossierClient_Path.$infclient['Client'].'/eqp.txt'));
    	fclose($fc);
    Citation Envoyé par blastafarie
    Je ne comprennait pourquoi $content était vide avant mais c'est que l'ouvrait en 'a' mais maintenant qu'il s'ouvre en 'r' il devrait le contenu complet du fichier
    Pour une lecture r est mieux en effet.

    Citation Envoyé par blastafarie
    Et str_replace(search,replace,subject) fonctionne si replace et ""??
    Si votre "et" est "est" alors oui c'est possible.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Points : 53
    Points
    53
    Par défaut
    Lol, merci beaucoup encore une fois et oui mon 'et' était un 'est'. Désolé pour les erreurs de frappe mais c'est la fin de la journée et même si on bouge pas beaucoup devant un pc c'est bien fatiguant quand même.
    Et en effet le sizeof est un peu vulgaire ici j'avais oublié la commande filesize. merci encore. Je pense que maintenant sa devrait le faire.
    A bientot

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 29/10/2011, 16h38
  2. Réponses: 0
    Dernier message: 20/09/2010, 17h55
  3. Erreur du type : must not throw an exception
    Par diagonale dans le forum Zend Framework
    Réponses: 4
    Dernier message: 26/07/2009, 17h12
  4. Réponses: 20
    Dernier message: 28/08/2008, 10h15
  5. Réponses: 2
    Dernier message: 24/04/2008, 15h31

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