PERL de nouveau débutant ... recherche de mot
sbouli
Messages postés
208
Statut
Membre
-
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
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
- Mot de passe - Guide
- Trousseau mot de passe iphone - 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 !