[PHP] l'utilisation des expression régulières
Medmidou
Messages postés
38
Date d'inscription
Statut
Membre
Dernière intervention
-
Elodie -
Elodie -
Bonjour,
Je veux effectuer plusieurs modifications sur un fichier texte à travers une interface en PHP.
Alors j'ai utilisé ce code et ça marche très bien :
Le problème maintenant ce que je veux effectuer trois autres traitements et je n'ai pas su comment?
D’abord voici le fichier texte, elle contient des centaines de blocs comme celui là :
1. Comment je peux enlever la première et la dernière ligne (les lignes en gras) à l'aide des expression régulières ou autre chose si c'est possible.
2. Comment je peux enlever les espaces a la fin de chaque ligne,j'ai utiliser cette expression régulière mais le problème qu'elle m'enlève même les sauts de ligne :
[code]if (preg_match("#:space:*$#",$donnee[$i])){$donnee[$i]=preg_replace("#:space:*$#","",$donnee[$i]);}[/code]
3. Comment je peux enlever les sauts de lignes vides
Merci d'avance pour l'aide
Je veux effectuer plusieurs modifications sur un fichier texte à travers une interface en PHP.
Alors j'ai utilisé ce code et ça marche très bien :
<?php $fichier="fichier.txt"; if (file_exists($fichier)) { if($ouvre=fopen("$fichier","r")) / { while (!feof ($ouvre)) { $lecture = fgets($ouvre, 512); $donnee=explode("<br>",$lecture); $combien=count($donnee)-1; for ($i=0;$i<=$combien;$i++) { if (preg_match("#p0*#",$donnee[$i])){$donnee[$i]=preg_replace("#p0*#","/",$donnee[$i]);} if (preg_match("#[A-Z]-9#",$donnee[$i])){$donnee[$i]=preg_replace("#-9#","9",$donnee[$i]);} if (preg_match("#/r01s1b0*#",$donnee[$i])){$donnee[$i]=preg_replace("#/r01s1b0*#","-",$donnee[$i]);} $liste_modif.=$donnee[$i].""; } } } else { echo "L'ouverture du fichier '$fichier' a echoué !!"; exit(); } } else { echo "Le fichier '$fichier' n'existe pas !!"; exit(); } fclose($ouvre); // fermeture $ouvre=fopen("texte.txt","w+"); fwrite($ouvre,$liste_modif); echo "<center><b>Modification réussie </b></center>"; fclose($ouvre); ?>
Le problème maintenant ce que je veux effectuer trois autres traitements et je n'ai pas su comment?
D’abord voici le fichier texte, elle contient des centaines de blocs comme celui là :
================================================================================ PATH Abis TUN_1006 ================================================================================ ***** MAIN ROUTE ******* [b]TUN9000-4/8c1[/b] TUN9000-15/1 TUN9043-16/2 TUN9043-15/12 TUN9009-1/2 [b]TUN9009-2/24c01[/b] ***** SPARE ROUTE ******* [b]TUN9043-16/2 [/b] TUN9043-15/11 TUN9009-1/1 [b]TUN9009-2/24c01 [/b] ================================================================================ PATH Abis BAR_1017_2 ================================================================================ ***** MAIN ROUTE ******* [b]TUN9001-2/17c01[/b] TUN9001-1/2 TUN9043-15/5 [b]TUN9043-3/17c1 [/b]
1. Comment je peux enlever la première et la dernière ligne (les lignes en gras) à l'aide des expression régulières ou autre chose si c'est possible.
2. Comment je peux enlever les espaces a la fin de chaque ligne,j'ai utiliser cette expression régulière mais le problème qu'elle m'enlève même les sauts de ligne :
[code]if (preg_match("#:space:*$#",$donnee[$i])){$donnee[$i]=preg_replace("#:space:*$#","",$donnee[$i]);}[/code]
3. Comment je peux enlever les sauts de lignes vides
Merci d'avance pour l'aide
A voir également:
- [PHP] l'utilisation des expression régulières
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Easy php - Télécharger - Divers Web & Internet
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
2 réponses
Bonjour,
[b]TUN9000-4/8c1[/b]
TUN9000-15/1
TUN9043-16/2
TUN9043-15/12
TUN9009-1/2
[b]TUN9009-2/24c01[/b]
tu fais un délimiteur pour chaque main route et dans chacun,
je pense que cette expression peut fonctionner "[b]!"
! équivaut à \
() ce que tu veux récupérer
[b]TUN9000-4/8c1[/b]
TUN9000-15/1
TUN9043-16/2
TUN9043-15/12
TUN9009-1/2
[b]TUN9009-2/24c01[/b]
tu fais un délimiteur pour chaque main route et dans chacun,
je pense que cette expression peut fonctionner "[b]!"
! équivaut à \
() ce que tu veux récupérer
Déjà regarde, dans les regex, \b qui désigne un début/fin de mot, cela pourrait t'aider je pense.
A mon avis tu est mieux à détecter les ***** MAIN ROUTE ***** et autre, sauter la ligne vide, la ligne inutile, stocker la liste des lignes suivantes jusqu'à ligne vide, et faire le traitement jusqu'à l'avant dernière ligne de donnée.
Je te disais \b :
ainsi cela devrait détecter la fin du mot précédant, puis faire sauter tous les espaces.
Exemple: Trouve le mot "web"
A mon avis tu est mieux à détecter les ***** MAIN ROUTE ***** et autre, sauter la ligne vide, la ligne inutile, stocker la liste des lignes suivantes jusqu'à ligne vide, et faire le traitement jusqu'à l'avant dernière ligne de donnée.
Je te disais \b :
(preg_match("#\b:space:*$#",$donnee[$i])){$donnee[$i]=preg_replace("#\b:space:*$#","",$donnee[$i]);
ainsi cela devrait détecter la fin du mot précédant, puis faire sauter tous les espaces.
Exemple: Trouve le mot "web"
<?php /* \b, dans le masque, indique une limite de mot, de façon à ce que le mot "web" uniquement soit repéré, et pas seulement des parties de mots comme dans "webbing" ou "cobweb" */ if (preg_match("/\bweb\b/i", "PHP est le meilleur langage de script du web.")) { echo 'Un mot a été trouvé.'; } else { echo 'Un mot n\'a pas été trouvé.'; } if (preg_match("/\bweb\b/i", "PHP est le meilleur langage de script pour les webagency.")) { echo 'Un mot a été trouvé.'; } else { echo 'Un mot n\'a pas été trouvé.'; } ?>