Bonjour,
Tout est dans le titre.
Dans mon cas, j'ai une chaîne qui contient du texte. A côté, j'ai un tableau rempli d'éléments (environ 100-200), dont certains contiennent du code d'expression régulière. L'objectif est de savoir, pour chaque élément du tableau, s'il est contenu dans la chaîne (et éventuellement de le renvoyer dans un autre tableau).
Ce que je fais, c'est un grep, du genre:
@nouveau_tableau = grep($ma_chaine =~ m/$_/, @mon_tableau);
J'ai essayé aussi avec un foreach.
Le problème, c'est que c'est pas trop rapide, d'autant plus que j'ai près d'une cinquantaine de chaînes à tester comme ça.
Quelqu'un aurait-il quelques trucs et astuces de derrière les fagots ?
# Je suppose qu'on parle de Perl ici...
Posté par mac . Évalué à 3.
Il y a toujours la solution de trier les regexp si tu cherches simplement 1 match (de la plus probable à la moins probable).
Sinon, une autre solution est de générer dynamiquement le code de tes regexp avec l'option /o, tu peux jeter un oeil à http://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch06_11.htm(...) par exemple pour plus d'informations.
[^] # Re: Je suppose qu'on parle de Perl ici...
Posté par Grégory SCHMITT . Évalué à 2.
Le problème de performance vient du fait de la répétition des recherches (à vu de nez, environ 20 000 recherches par lancement...gloups...).
Trier les regexps ne m'est pas utile, ton lien l'est beaucoup plus (même si /o ne sera pas utile, car je change à chaque fois de pattern).
Merci.
# regexp
Posté par Mouns (site web personnel) . Évalué à 1.
for my $chaine ( qw( tototo titi toto ) ) {
print join( " + ", $chaine, ( grep { $chaine =~ $_ } @regexp ), "\n" );
}
[^] # Re: regexp
Posté par Grégory SCHMITT . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.