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

sbouli Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 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 !
A voir également:

3 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
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
sbouli Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   2
 
oula ça me parait un peu ... compliqué pour si peu non ?
0
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Tu extrais les lignes idoines.
0