【问题标题】:String match excluding brackets不包括括号的字符串匹配
【发布时间】:2012-07-17 21:43:56
【问题描述】:

以下两个字符串完全相同,但我无法使用正则表达式进行匹配?有人可以帮我吗?

$x="Enzyme(s)"; $y="Enzyme(s)";

if ($x =~ /^$y$/){print "String Matches"};

【问题讨论】:

    标签: perl brackets


    【解决方案1】:

    使用quotemeta:

    my $x="Enzyme(s)";
    my $y="Enzyme(s)";
    $y = quotemeta($y);
    if ($x =~ /^$y$/){print "String Matches"};
    

    【讨论】:

      【解决方案2】:

      匹配字符串中的括号 $y 被解释为分组或捕获。它们需要被“转义”,以便它们可以被视为普通字符。

      在 $y 赋值之后添加以下代码。

      $y =~ s/\(/\\(/g;  # escape left parens
      $y =~ s/\)/\\)/g;  # escape right parens
      

      “s”代表“替代”。
      “g”代表“全局”替换。即,替换字符串中的所有匹配项。

      【讨论】:

      • 不客气! (欢迎来到 StackOverflow!此时,您应该“接受”我的回答来鼓励我……;^)
      【解决方案3】:

      您应该使用 quotemeta 作为 M42 已经提到的,或者为了避免额外的代码行和 $y 变量的永久更改,您可以在正则表达式中使用 \Q...\E 来禁用范围内的所有模式元字符:

      my $x="Enzyme(s)";
      my $y="Enzyme(s)";
      if ($x =~ /^\Q$y\E$/){print "String Matches"};
      

      【讨论】:

        猜你喜欢
        • 2022-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 2016-02-28
        相关资源
        最近更新 更多