Ich habe Probleme mit Perl grep() mit einer Zeichenfolge, die kann enthalten Zeichen, die als Quantifizierer für reguläre Ausdrücke interpretiert werden.Gibt es eine Perl-Funktion, um einen String in einen Regexp zu verwandeln, um diesen String als Muster zu verwenden?
Ich bekam den folgenden Fehler, wenn das Grep-Muster "g ++" ist, weil die '+' Symbole als Quantifizierer interpretiert werden. Hier ist die Ausgabe von für Programm, das folgt:
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.
Gibt es einen Modifikator ich, um anzuzeigen, verwenden könnte grep, dass die quantifiers ignoriert werden sollen, oder gibt es eine Funktion, die die quantifiers entweichen würde?
#! /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: zusätzlich zu der Antwort Frage oben, ich begrüße jedes Feedback auf Perl Verwendung in der oben als ich noch lernen. Dank
Hinweis \ Q endet bei \ E, sollte wahrscheinlich sicherstellen, dass \ E im Inhalt ist escaped. – Hasturkun
Sie müssen nicht - \ E im * interpolierten * Muster verursacht keine Probleme. – hexten