Rechercher : dans
Par :

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

Dernière réponse le 18 oct 2007 à 16:00:45 Medmidou, le 29 sep 2007 à 10:07:24 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « [PHP] l'utilisation des expression régulières » dans :
[RegExp] Récupérer une adresse IP VoirFinalité Mise en œuvre Explications Interprétation du motif Récupérer une adresse IP Finalité Pour récupérer une IP dans un fichier texte, fichiers journaux, pages web, etc. Mise en œuvre L'expression régulière suivante combinée à la...
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
PHP - Les classes VoirLa notion de classe Php3 intègre un soupçon de caractéristiques empruntées aux langages orientés objet, c'est-à-dire la possibilité d'utiliser des objets, entités regroupant des données et des fonctions au sein d'une structure et rendant la...

1

vignemail1, le 29 sep 2007 à 10:16: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é.';
}
?>
 

Répondre à vignemail1

2

Medmidou, le 29 sep 2007 à 11:14:31

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

Répondre à Medmidou

3

 Elodie, le 18 oct 2007 à 16:00:45

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

Répondre à Elodie
Collection CommentÇaMarche.net