Extract de terme entre "et" commerciale dans la ligne

Extract de terme entre "et" commerciale dans la ligne - Perl - Programmation

Marsh Posté le 13-03-2013 à 17:31:13    

Bonjour,  
 
Le script suivant :  

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. my $infile = '34.html';
  4. my $target = "file=mp4\:";
  5. open (IN, $infile) or die $! ;
  6. foreach my $ligne  (<IN> ) {
  7. if ($ligne =~ /$target/) {
  8.   print  "$ligne\n";
  9.   }
  10. }
  11. close (IN);


 
Me renvoi cette ligne :
 
<embed type="application/x-shockwave-flash" src="http://capitulosdenovela.net/swf/2.swf" style="" id="mpl" name="mpl" quality="high" allowfullscreen="true" allowscriptaccess="always" flashvars="skin=&plugins=&file=mp4:univisionflash/media/13/01/18/130118_601/130118_2777821_Chantaje_1358863384_500.mp4&streamer=rtmp://cp31851.edgefcs.net/ondemand&autostart=false&adttext.config=http://www.capitulosdenovela.net/fondo/fondo4.png&abouttext=capitulosdenovela.net - Telenovelas y Series!&aboutlink=http://www.capitulosdenovela.net/" width="100%" height="400"></embed>
 
 
Comment faire pour que  la sortie soit reduite à ce minimun :
univisionflash/media/13/01/18/130118_601/130118_2777821_Chantaje_1358863384_500.mp4
sachant que les nombres peuvent changer ....  
 
Merci de votre aide.....
 
 
 

Reply

Marsh Posté le 13-03-2013 à 17:31:13   

Reply

Marsh Posté le 13-03-2013 à 18:42:02    

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. my $infile = '34.html';
  7. my $target = 'file=mp4:';
  8. open(my $fh, $infile);
  9. foreach (<$fh> ) {
  10.  print "$1\n" if m/(?:$target)([^&> ]+)/;
  11. }
  12. close($fh);


[^&> ] fait arrêter la capture du texte si on rencontre un &, un > ou un espace. S'il peut y avoir des espaces dans le path, alors utiliser [^&>] à la place.
A+,


Message édité par gilou le 13-03-2013 à 19:00:56

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-03-2013 à 19:39:52    

Merci Gilou,
très efficace et très instructif ....  
Donc une question : qu'est ce que le m/(?:$target)/
et une remarque : Le if est généralement avant l’exécution de la commande ....  

Reply

Marsh Posté le 14-03-2013 à 00:03:09    

m/regex/ c'est un match de l'expression régulière (par $_ si rien n'est précisé)
(?:regex) c'est un groupe qui n'est pas sauvegardé, donc qui n'est pas pris en compte pour les $1, $2, etc. Ça sert souvent a faire du un contexte à gauche de matching d'expression régulière, comme dans mon exemple.
 

Citation :

Le if est généralement avant l’exécution de la commande ....  

Sauf que il faudrait que je crée un bloc:
if (test) {commande;}  
ce qui chez moi prends trois lignes systématiquement
if (test) {
  commande;
}
alors que je n'en ai pas besoin dans l'autre sens:
commande if (test);
Donc pour une commande simple,  je préfère ce style qui s'écrit sur une ligne.
Ça marche aussi avec unless
commande unless (test);
voire même avec un foreach:
print "$_" foreach (<$fh> );
 
A+,


Message édité par gilou le 14-03-2013 à 00:11:59

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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