Bonjour,
Je fais mes premiers pas avec Perl et j'ai un petit souci d'evaluation d'une expression reguliere pour extraire du code entre deux balises html.
Voici le code que je teste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
sub lirefic(){
    my $fic= $dir.$ligne;
    if(-f $fic){
	print $fic." : \n";
	die "ouverture fichier impossible : $!\n" unless open(FIC, $fic);
	while(<FIC>){
	    if($_ =~ /<style[^>]+>([^<]+)<\/style>/){
		print "$_";
	    }  
	}
	close(FIC);
    }
}
et voici ce sur quoi j'applique mon expression reguliere :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
<style type="text/css">
html,body{margin:0;padding:0}
body{font: 76% arial,sans-serif}
p{margin:0 10px 10px}
</style>
Celui çi ne me renvoir que ceci en resultat d'évaluation ( je suis sur Emacs):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<style type="text/css">^M
, mais pas le contenu entre les deux balises.
Mon expression réguliere me semble correcte puisque ça fonctionne avec PHP ( voir çi dessous). J'ai essayé avec les operateurs 'm' et 's' sans succès. Je pense le l'évaluation butte au passage au premier passage à la ligne.

Qqu'un aurait il une idée ?
Merci d'avance.
riccco

ps un bout de code en PHP qui fonctionne parfaitement sur ce cas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
function regExtract($f) {
    if(is_readable($f)){ $contenu = file_get_contents($f);}
    preg_match('/<style[^>]+>([^<]+)<\/style>/', $contenu, $match);
    createCssFile($match[1]);   
}