J'ai du mal à utiliser Perl grep() avec une chaîne qui peut contenir des caractères qui sont interprétés comme des quantificateurs d'expressions régulières.Existe-t-il une fonction Perl pour transformer une chaîne en expression rationnelle afin d'utiliser cette chaîne comme modèle?
J'ai l'erreur suivante lorsque le modèle grep est "g ++" car les symboles '+' sont interprétés comme des quantificateurs. Voici la sortie pour le programme qui suit:
1..3
ok 1 - grep, pattern not found
ok 2 - grep, pattern found
Nested quantifiers in regex; marked by <-- HERE
in m/g++ <-- HERE/at escape_regexp_quantifier.pl line 8.
est-il un modificateur je pourrais utiliser pour indiquer grep que les quantificateurs doivent être ignorées, ou est-il une fonction qui échapperait quantificateurs?
#! /usr/bin/perl
sub test_grep($)
{
my $filter = shift;
my @output = ("-r-xr-xr-x 3 root bin 122260 Jan 23 2005 gcc",
"-r-xr-xr-x 4 root bin 124844 Jan 23 2005 g++");
return grep (!/$filter/, @output);
}
use Test::Simple tests => 2;
ok(test_grep("foo"), "grep, pattern not found");
ok(test_grep("gcc"), "grep, pattern found");
ok(test_grep("g++"), "grep, pattern found");
PS: en plus de la question de réponse ci-dessus, je me réjouis des commentaires sur l'utilisation de Perl dans ce qui précède que je suis encore à apprendre. Merci
note \ Q se termine à \ E, devrait probablement s'assurer que \ E dans le contenu est échappé. – Hasturkun
Vous n'avez pas besoin de - \ E dans le motif * interpolé * ne cause aucun problème. – hexten