Perl: expression reguliere

Perl: expression reguliere - Perl - Programmation

Marsh Posté le 24-03-2005 à 22:06:03    

Bonjour
 
J'aimerai recuperé dans un fichier qui est en fait du code html une seaunce de texte comprise uniquement entre les balises <PRE> et </PRE>.
Cette zone de texte peut s'etendre d'une a plusieurs lignes, et les balises peuvent commencer en debut de ligne ou apres des caractères.
 
Voila se que j'ai fait comme expression valable uniquement si les balises sont sur une seule ligne:

Code :
  1. =~ /.*<PRE>(.*)<\PRE>.*/


 
comment faire??? merci pour votre aide... :hello:

Reply

Marsh Posté le 24-03-2005 à 22:06:03   

Reply

Marsh Posté le 24-03-2005 à 23:07:16    

Reply

Marsh Posté le 24-03-2005 à 23:32:06    

Merci pour ta reponse.
En faisant ta modification, cela ne marche pas dans ce cas:

Code :
  1. <html>
  2. <PRE> MARCHE <PRE> UNDEF
  3. UNDEF
  4. DES chose
  5. <PRE> TEXTE A RECUP MARCHE PAS :sedfsdfsdfsdf
  6. sdfsdfdsfsdfsdfsfdsfdsfsdfsdfsdfsdf
  7. sdf<\PRE>
  8. <html>


 
 :whistle:  
 
 

Reply

Marsh Posté le 24-03-2005 à 23:33:13    

.*?

Reply

Marsh Posté le 25-03-2005 à 00:15:42    

suomi a écrit :

Merci pour ta reponse.
En faisant ta modification, cela ne marche pas dans ce cas:

Code :
  1. <html>
  2. <PRE> MARCHE <PRE> UNDEF
  3. UNDEF
  4. DES chose
  5. <PRE> TEXTE A RECUP MARCHE PAS :sedfsdfsdfsdf
  6. sdfsdfdsfsdfsdfsfdsfdsfsdfsdfsdfsdf
  7. sdf<\PRE>
  8. <html>


 
 :whistle:

ben en meme temps y'a pas de "</pre>" dans ton example


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 25-03-2005 à 00:49:06    

Bon exusez moi si j'évoque mal mon problème...
 
J'ai un fichier qui est en faite un code html avec plusieurs balises, pleins de texte. L'info qui m'interesse se trouve uniquement entre les balises <PRE> et <\PRE> de ce fichier. Ces balises peuvent etre en debut ou à n'importe quel endroit de la ligne. De plus ces 2 balises peuvent s'etendre sur une ou plusieurs lignes.
 
Pour extraire mes données voila comment je compte faire:
 

Code :
  1. open (fichier,"fichier.html" );
  2. while (my $ligne =<fichier> ){
  3.   if ($ligne =~ /<PRE>(.*)<\/PRE>/is){
  4.     print $ligne;}
  5. }


 
MAis ceci ne marche pas comme pour ici:
 
Extrait de mon fichier:

Code :
  1. <HR><p><PRE>>X07448|IGHV1-2*01|Homo sapiens|F|V-REGION
  2. caggtgcagctggtgcagtctggggctgaggtgaagaagcctggggcctcagtgaaggtc
  3. tcctgcaaggcttctggatacaccttcaccggctactatatgcactgggtgcgacaggcc
  4. cctggacaagggcttgagtggatgggacggatcaaccctaacagtggtggcacaaactat
  5. ......
  6. </PRE><P>
  7. Suite.....

Reply

Marsh Posté le 25-03-2005 à 00:58:41    

ben forcement, si tu fais ton match sur une seule ligne et pas tout le fichier...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 25-03-2005 à 09:31:33    

Ben je suis désolé mais je ne vois pas trop comment faire alors... tu suggères quoi?  :??:  
 
Merci pour vos réponses

Reply

Marsh Posté le 25-03-2005 à 10:03:55    

Code :
  1. my $html = do {local $/=undef; <FICHIER>};
  2. my ($pre) = $html =~ ...


Message édité par pospos le 25-03-2005 à 10:04:13
Reply

Marsh Posté le 25-03-2005 à 10:20:15    

Merci Pospos pour ta réponse.
Ta solution marche mais que dans le cas ou il y a dnas le code html qu'une balise <PRE>....<\PRE>
Dans mon cas, il y en a plusieurs dans la page et je dois toutes les récuperer. Ici avec ta solution, il trouve la premiere et la derniere balise et il met tout entre les 2...
 

Reply

Marsh Posté le 25-03-2005 à 10:20:15   

Reply

Marsh Posté le 25-03-2005 à 10:36:18    

Bon j'ai reussi, en intégrant la réponse de Pospos dans une boucle
Merci beaucoup pour votre aide...
 :jap:

Reply

Marsh Posté le 25-03-2005 à 15:00:53    

Sans boucle : /<pre>(.*?)<\/pre>/gis
 
Encore une fois : http://perldoc.com/perl5.8.4/pod/p [...] ESCRIPTION

Reply

Sujets relatifs:

Leave a Replay

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