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 07/11/2007, 15h42   #1
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 59
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2007
Messages : 59
Points : 25
Points : 25
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 :
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 ++
blastafarie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 15h50   #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
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)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 16h06   #3
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 59
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2007
Messages : 59
Points : 25
Points : 25
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 ++
blastafarie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 16h14   #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
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 16h53   #5
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 59
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2007
Messages : 59
Points : 25
Points : 25
Merci, j'ai remplacer preg_replace par str_replace et sa à l'air de fonctionner.
Mais je ne comprend pas:
Code :
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
blastafarie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 17h10   #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
Je pense plutôt que vous vouliez faire :
Code :
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 :
	$content = file_get_contents($DossierClient_Path.$infclient['Client'].'/eqp.txt');
A la place de :
Code :
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 17h26   #7
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 59
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2007
Messages : 59
Points : 25
Points : 25
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
blastafarie 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 10h33.


 
 
 
 
Partenaires

Hébergement Web