我在使用Perl grep()时遇到麻烦,该字符串可能包含被解释为正则表达式量词的字符.
当grep模式为"g ++"时,我得到以下错误,因为'+'符号被解释为量词.以下是程序的输出:
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.
是否有一个修饰符我可以用来表示grep应该忽略量词,还是有一个函数可以逃避量词?
#! /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:除了上面的答案问题,我欢迎任何关于Perl使用的反馈,因为我还在学习.谢谢
标准方法是\Q
在变量之前使用转义指示符,告诉Perl不要将内容解析为正则表达式:
return grep (!/\Q$filter/, @output);
在代码中更改该行会产生:
1..3 ok 1 - grep, pattern not found ok 2 - grep, pattern found ok 3 - grep, pattern found
我想你正在寻找quotemeta
除了上面的答案问题,我欢迎任何有关Perl用法的反馈,因为我还在学习.谢谢
我建议你不要使用原型(test_grep之后的($)).它们有它们的用途,但对大多数情况并非如此,绝对不是在这个例子中.