我有一个带有特殊字符和换行符的Perl字符串,需要传递给命令行实用程序(除非转义,否则不接受特殊字符)。
如何用前面的\
替换每个特殊字符?
我可以单独替换每个字符,但想知道是否有更好的方法?
从spreasheet中的单元格读取时,字符串如下所示。
<meta property="og:url" content="http://www.example.com/test/testpage.aspx?ID=OO3JUPVSWjs%3d&ContentTypeId=qbeAILfmBIE%3d" />
我尝试了$str =~ /^\Q$str\E/;
但是当变量传递给命令行实用程序时失败。
答案 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"
}