【问题标题】:How to copy a pattern from a string variable in perl如何从perl中的字符串变量复制模式
【发布时间】:2012-06-18 13:37:33
【问题描述】:

我需要使用 perl 复制 =) 之间的句子内容。 比如说:

 $temp="06/18/2012 08:35:35(PID=2150)";

现在我需要将=) 之间的值2150 复制到变量$temp2

【问题讨论】:

    标签: perl


    【解决方案1】:

    使用正则表达式很容易实现:

    my ($temp2) = $temp =~ /=(\d+)\)/;
    

    只需查找=\) 之间的数字序列。右括号必须转义,因为括号用于捕获组。

    您必须将$temp2 括在括号中的原因是您需要强制列表上下文返回匹配结果。在标量上下文中,您只会得到匹配的数量;在这种情况下为 1。

    【讨论】:

      【解决方案2】:

      仅使用 index() 和 substr()(作为练习,如果有的话;)。

      $temp="06/18/2012 08:35:35(PID=2150)";
      $temp = substr $temp, index($temp, "=") + 1, (index($temp, ")") - 1) - index($temp, "=");
      print $temp;
      

      【讨论】:

      • +1 用于展示如何在没有正则表达式的情况下完成 - 有助于讨论为什么我们毕竟需要正则表达式。 )
      • 哈哈,当然 - 表明虽然人们(至少一开始)说正则表达式看起来很糟糕......但替代方案可能更糟糕!
      • 另一个新颖的解决方案是my $temp2 = join "", grep /\d/, grep {/=/../\)/} split //, $temp;。不过不是很健壮。
      猜你喜欢
      • 2011-04-21
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 2012-03-17
      • 2020-09-16
      • 1970-01-01
      相关资源
      最近更新 更多