当前位置:  开发笔记 > 编程语言 > 正文

是否有Perl函数将字符串转换为正则表达式以将该字符串用作模式?

如何解决《是否有Perl函数将字符串转换为正则表达式以将该字符串用作模式?》经验,为你挑选了3个好方法。

我在使用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使用的反馈,因为我还在学习.谢谢



1> Adam Bellair..:

标准方法是\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



2> Leon Timmerm..:

我想你正在寻找quotemeta



3> Leon Timmerm..:

除了上面的答案问题,我欢迎任何有关Perl用法的反馈,因为我还在学习.谢谢

我建议你不要使用原型(test_grep之后的($)).它们有它们的用途,但对大多数情况并非如此,绝对不是在这个例子中.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有