【问题标题】:Escaping special characters in Perl regex在 Perl 正则表达式中转义特殊字符
【发布时间】:2011-11-17 09:33:57
【问题描述】:

我正在尝试匹配 Perl 中的正则表达式。我的代码如下所示:

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ($source =~ m/$pattern/) {
  print "Match found!"
}

问题出现在 Perl 尝试匹配正则表达式时,括号表示字符类(或者我读到的),并且匹配最终失败。我知道我可以用\[ 或\] 转义括号,但这需要另一个代码块来遍历字符串并搜索括号。有没有办法让括号自动忽略而不单独转义?

快速说明:我不能只添加反斜杠,因为这只是一个示例。在我的真实代码中,$source 和 $pattern 都来自 Perl 代码之外(URIEncoded 或来自文件)。

【问题讨论】:

    标签: regex perl escaping pattern-matching


    【解决方案1】:

    \Q 将禁用元字符,直到找到 \E 或模式结束。

    my $source = "Hello_[version]; Goodbye_[version]";
    my $pattern = "Hello_[version]";
    if ($source =~ m/\Q$pattern/) {
      print "Match found!"
    }
    

    http://www.anaesthetist.com/mnm/perl/Findex.htm

    【讨论】:

    • 谢谢!我知道这是一个简单的解决方案,效果很好!
    • 更改了我的“接受的答案”,抱歉,虽然你的工作正常,但我认为 index() 确实是我想要的。不过谢谢!
    【解决方案2】:

    使用quotemeta():

    my $source = "Hello_[version]; Goodbye_[version]";
    my $pattern = quotemeta("Hello_[version]");
    if ($source =~ m/$pattern/) {
      print "Match found!"
    }
    

    【讨论】:

      【解决方案3】:

      你使用了错误的工具来完成这项工作。

      你没有模式!没有正则表达式 $pattern 中的字符!

      你有一个文字字符串。

      index() 用于处理文字字符串...

      my $source = "Hello_[version]; Goodbye_[version]";
      my $pattern = "Hello_[version]";
      if ( index($source, $pattern) != -1 ) {
          print "Match found!";
      }
      

      【讨论】:

      • 究竟什么是“正则表达式字符”?我的印象是,正则表达式只是匹配字符串或字符串中的模式的一种方法,而不是一组特定的字符,除非我不知道它还有其他含义吗?不过,感谢 index()。明天我在服务器时会试一试;我确实认为 index() 会比正则表达式匹配更好,更干净。
      • “正则表达式字符”是一个错字,我的意思是写“正则表达式元字符”。
      • 在 $source 中查找带有 @ 符号的字符串时不起作用。
      【解决方案4】:

      您可以使用以下命令转义表达式中的特殊字符集。

      expression1 = '带有 $ % ( ) 等特殊字符的文本';

      表达式1 =~s/[\?*+\^\$[]\(){}\|-]/"\$&"/eg ;

      这将转义所有特殊字符

      print "expression1'; # 带有特殊字符的文本,如 \$ \% ( )

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 1970-01-01
        • 2014-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多