[perl] matcher sur plusieurs lignes avec <>

matcher sur plusieurs lignes avec <> [perl] - Perl - Programmation

Marsh Posté le 10-10-2005 à 21:34:21    

Bonjour à tous,  
 
Je cherche à matcher une expression sur l'entrée standard avec l'opérateur <> et une regexp.
Comment faire pour que ma regexp porte sur plusieurs lignes???
 
J'ai essayé les options g, m, c sans succès.
 
Quelqu'un a une idée?
 
Merci!

Reply

Marsh Posté le 10-10-2005 à 21:34:21   

Reply

Marsh Posté le 10-10-2005 à 21:46:07    

si tu parcours ton fiwhier avec un while alors tu ne peu traiter qu'une ligne du fichier à chaque boucle. la solution serait, si ton fichier n'est pas trop gros, de le charger entierement dans une variable puis de faire ton match dessus.
 
Pour faire ca tu peu utiliser le module Slurp ou File::Slurp
 
ou tu peu le faire à la mano:
my $content = do{local $/;<FILE>};
$content =~...

Reply

Marsh Posté le 14-10-2005 à 19:14:48    

Ok merci/
Je crois qu'il y a un autre facteur en plus a prendre en compte, il faut enlever les retours à la ligne avec la fonction chomp().

Reply

Marsh Posté le 14-10-2005 à 22:19:15    

chomp va virer le caractere de separation, c'est à dire $/, et si on slurp le fichier alors $/ est indefini...
si tu prend ligne par ligne alors tu n'a aucune chance de matcher plusieurs lignes en meme temps

Reply

Marsh Posté le 21-10-2005 à 17:13:21    

Pas besoin de virer les \n, utilise simplement //s ou //ms suivant ce que tu veux faire.

Reply

Marsh Posté le 21-10-2005 à 17:58:00    

Vous pouvez utiliser ce que vous voulez, vous ne pourrez pas matcher plusieurs lignes d'un coup si vous lisez le fcihier ligne par ligne !
il faut le slurper et faire le match sur le tout

Reply

Marsh Posté le 23-10-2005 à 04:39:03    

Mon post était en complément du tien évidemment ($/ + //ms).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed