[PHP] l'utilisation des expression régulières

Fermé
Medmidou Messages postés 38 Date d'inscription samedi 18 juin 2005 Statut Membre Dernière intervention 11 mai 2008 - 29 sept. 2007 à 10:07
 Elodie - 18 oct. 2007 à 16:00
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 :

<?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:

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](.*)[b]!"


! équivaut à \
() ce que tu veux récupérer
0
vignemail1 Messages postés 1246 Date d'inscription vendredi 8 octobre 2004 Statut Contributeur Dernière intervention 13 septembre 2019 259
29 sept. 2007 à 10:16
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 :
(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é.';
}
?>
 
-1
Medmidou Messages postés 38 Date d'inscription samedi 18 juin 2005 Statut Membre Dernière intervention 11 mai 2008 2
29 sept. 2007 à 11:14
même problème, lorsquej'utilise le code avec "\b", j'obtiens le résultat suivant :
TUN9000-4/8c1TUN9000-15/1TUN9043-16/2TUN9043-15/12TUN9009-1/2TUN9009-2/24c01
-1