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 -
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 :
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 :
mais ça me parait ... un peu légé ...
Merci pour votre aide !
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
-
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
-
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 ! -