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 -
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 :
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 !
A voir également:
- PERL de nouveau débutant ... recherche de mot
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Mot de passe bios perdu - Guide
- Voir mot de passe wifi android - Guide
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
Si on va le supprimé on obtiendra rien comme résultat
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.
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:
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 !