perl - 在没有quotemeta的字符串中转义特殊字符

时间:2014-05-09 08:39:36

标签: regex string perl special-characters

我有一个带有特殊字符和换行符的Perl字符串,需要传递给命令行实用程序(除非转义,否则不接受特殊字符)。

如何用前面的\替换每个特殊字符?

我可以单独替换每个字符,但想知道是否有更好的方法?

从spreasheet中的单元格读取时,字符串如下所示。

<meta property="og:url" content="http://www.example.com/test/testpage.aspx?ID=OO3JUPVSWjs%3d&ContentTypeId=qbeAILfmBIE%3d" />

我尝试了$str =~ /^\Q$str\E/;

但是当变量传递给命令行实用程序时失败。

2 个答案:

答案 0 :(得分:5)

正如您已经指出的那样,您可以使用quotemeta

$str = quotemeta $str;

但是,如果由于某种原因这不好,你可以建立自己想要逃避的角色字符类

$str =~ s/([\\'"])/\\$1/g;

答案 1 :(得分:0)

您可以单独构建模式并执行匹配:

my $pattern = "$bar";
my $regex = "\Q$pattern\E";

if ( q(foo $bar baz) =~ /$regex/ ) {
    print "match\n"
}
else {
    print "no match\n"
}