代码之家  ›  专栏  ›  技术社区  ›  doron

使字符串对Perl中的正则表达式安全

  •  2
  • doron  · 技术社区  · 14 年前

    我有一个字符串,我想在正则表达式中使用它 m/$mystring_03/ 然而 $mystring 包含导致问题的+s和斜线。Perl中有简单的修改方法吗 $字符串 要确保所有正则表达式通配符或其他特殊字符都正确转义?(就像所有人一样) + 变成 \+ )

    3 回复  |  直到 14 年前
        1
  •  13
  •   Chas. Owens    14 年前

    是的,使用 \Q and \E escapes :

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    my $text = "a+";
    
    print
        $text =~ /^$text$/     ? "matched" : "didn't match", "\n",
        $text =~ /^\Q$text\E$/ ? "matched" : "didn't match", "\n";
    
        2
  •  10
  •   Peter S. Housel    14 年前

    这个 quotemeta 函数按您的要求执行。

        3
  •  1
  •   Peter Tillemans    14 年前

    如果要为字符串中的正则表达式转义所有特殊字符,也可以使用类似rindex的

    index($_, "$mystring_03")
    

    这将返回要测试的字符串中字符串的索引,或者在找不到匹配项时返回-1。