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!
Publicité
Posté le 10-10-2005 à 21:34:21
pospos
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 =~...
gandolfouille
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().
pospos
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
matafan
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.
pospos
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
matafan
Posté le 23-10-2005 à 04:39:03
Mon post était en complément du tien évidemment ($/ + //ms).