【问题标题】:perl - escape special characters in string without quotemetaperl - 在没有引号的情况下转义字符串中的特殊字符
【发布时间】:2014-05-09 08:39:35
【问题描述】:

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

如何将每个特殊字符替换为前面的\

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

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

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

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

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

【问题讨论】:

    标签: regex string perl special-characters


    【解决方案1】:

    正如你已经指出的,你可以使用quotemeta

    $str = quotemeta $str;
    

    但是,如果由于某种原因这并不好,您可以构建自己的要转义字符的字符类

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

    【讨论】:

    • 是的,上面的正则表达式会有所帮助,但是当我添加 & 时失败了? , % 在正则表达式中,也许我添加错了。 $item=~ s/([\\'"#?&;%*])/\\$1/g;
    • $item=~ s/([\\'"#?;%*&])/\\$1/g; ## 这似乎工作
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 2019-11-20
      • 2011-04-12
      • 2011-05-11
      相关资源
      最近更新 更多