gilou Modérateur Modosaurus Rex | Un truc comme ça alors:
Code :
#!/usr/bin/perl use strict; use warnings; my @testlist = ("Alias Toto", "alias TUTU TOTO", "TOTO ALIAS", "AlIAS TOTO", "TUTU haha" ); # pour tester my @words = qw(alias toto tutu ); # les mots clés my $regexp = "(". join('|', map {uc($_)} @words) . " )"; # (ALIAS|TOTO|TUTU) ici foreach my $line (@testlist) { if (/$regexp/io) { # on saute les lignes sans mots clés s/ (^|\ s)$regexp(?=\s|$ )//go; # on vire les mots clés en majuscule print "$line\n" if (/ $regexp/io ); # on imprime la ligne s'il reste un mot clé } }
|
L'idée: sur les lignes qui ont au moins un mot clé, on vire tous les mots clés en majuscule qui y figurent, et si on y trouve encore un mot clé, c'est qu'il y avait au moins un mot clé qui n'était pas en majuscule.
On pourrait se passer de la ligne 11, i.e. on vire tous les mots clés en majuscule de toute ligne, et si on y trouve encore un mot clé, c'est qu'il y avait au moins un mot clé qui n'était pas en majuscule dans la ligne, mais ça fait traiter inutilement des lignes et n'est pas optimal.
J'ai écrit la partie entre les lignes 9 et 15 pour que ce soit assez optimal (je vois pas trop comment optimaliser plus) et que ça ne modifie pas ce qu'on teste (cas par exemple ou la liste est en fait un fichier lié avec Tie::File).
Note: le blanc qui apparaît avant la parenthèse fermante de la définition de $regexp est un artéfact du code d'affichage du forum.
A+, Message édité par gilou le 14-06-2011 à 23:05:50 ---------------
There's more than what can be linked! -- Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
|