PERL de nouveau débutant ... recherche de mot

sbouli Messages postés 208 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,

J'ai un peu honte, mais j'ai laché PERL depuis trop longtemps ....

imaginons la phrase :
Feb 23 10:55:22 bonjour maurice ne trouves-tu pas le temps superbe aujourd'hui ?


et dans le code je souhaite faire un :

si $_ contient les mots maurice et temps superbe alors

ne sachant pas toujours ce qu'il peut y avoir entre maurice et temps superbe ...

je pense que ça tourne autour de :
if ($_ =~ /*maurice*temps superbe*/) 


mais ça me parait ... un peu légé ...

Merci pour votre aide !

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    if ($_ =~ /*maurice*temps superbe*/)

    C'est plutôt faux pas léger ;-)

    Ton expression régulière n'est pas correcte vu que tu utilises le quantificateur pour rien au début de la regex.
    Voici le message d'erreur du Perl

    ~$ echo maurice et temps superbe| perl -ne 'print if  /*maurice*temps superbe*/'
    Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE maurice*temps superbe*/ at -e line 1.


    Si on va le supprimé on obtiendra rien comme résultat

    ~$ echo maurice et temps superbe| perl -ne 'print if  /maurice*temps superbe*/'
    ~$ 


    Pourquoi?
    On va traduire ta regex et tu comprendras.
    /maurice*temps superbe*/

    m suivi de a suivi de u suivi de r suivi de i suivi de c suivi de suivi de e (zéro fois, une fois ou n'importe combien de fois) suivi de t suivi de e ............................suivi de b suivi de e (zéro fois, une fois ou n'importe combien de fois)

    Ca fonctionne comme ça avec la condition que maurice est toujours avant temps superbe sinon il faudra utiliser l'opérateur && comme t'a montré jisisv dans son exemple.
    ~$ echo maurice et temps superbe| perl -ne 'print if  /maurice.*temps superbe/'
    maurice et temps superbe


    1
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    Cela fait longtemps que je n'ai plus fait du PERL.
    Inspire-toi peut-être de ceci:
    
    johand@osiris:~/src/ccm/perl$ cat *dat
    maurice
    temps superbe maurice jfdhdvhvbh
    maurice hhh temps superbe
    temps superbe djn jdn j fj  Maurice
    johand@osiris:~/src/ccm/perl$ ./maurice.pl < maurice.dat 
    temps superbe maurice
    maurice hhh temps
    temps superbe djn
    johand@osiris:~/src/ccm/perl$ cat maurice.pl
    #! /usr/bin/perl -w
    while(<>) {
        $v = "temps superbe";
        if(  /maurice/i && /$v/i ) {
    	@fields = split(/ /);
    	print(join( ' ', $fields[0], $fields[1], $fields[2]) . "\n");
        }
    }
    Crée une fonction !
    
    0
    1. sbouli Messages postés 208 Statut Membre 2
       
      oula ça me parait un peu ... compliqué pour si peu non ?
      0
  3. jisisv Messages postés 3678 Statut Modérateur 936
     
    Tu extrais les lignes idoines.
    0