【问题标题】:Return values for string matching字符串匹配的返回值
【发布时间】:2011-04-07 19:16:37
【问题描述】:

假装我在 awk 中有一个代码:

str_1 = "abc123defg";
match(str_1, /[0-9]+/);
num_1 = substr(str_1, RSTART, RLENGTH);

那么 num_1 将是“123”。同一任务的 Perl 版本是什么?

提前致谢。

【问题讨论】:

    标签: regex perl awk pattern-matching


    【解决方案1】:

    我会把它翻译成:

    my $num_1 = ($str_1 =~ /(\d+)/)[0];
    

    【讨论】:

    • 谢谢!因此,如果我将此字符串扩展为“abc123def456ghi789jkl”,则 [0] = 123; [1] = 456 等...正确吗?
    • 我认为您需要添加 /g 修饰符才能使其正常工作。
    【解决方案2】:

    我通常会做类似的事情

    my ($num_1) = $str_1 =~ /(\d+)/;
    

    my $num_1;
    if ($str_1 =~ /(\d+)/) {
        $num_1 = $1;
    }
    

    在 Perl 的模式中,\d 等效于 ASCII 字符串的[0-9]

    【讨论】:

      【解决方案3】:

      可能是:

      $str="abc123defg";
      $str =~ /[0-9]+/;
      $num_1 = $&;
      

      你的 awk 直接翻译成:

      $str="abc123defg";
      $str =~ /[0-9]+/;
      $num_1 = substr($str, $-[0], $+[0]-$-[0]);
      

      可以写成:

      use English;
      
      $str="abc123defg";
      $str =~ /[0-9]+/;
      $num_1 = substr($str, $LAST_MATCH_START[0], $LAST_MATCH_END[0]-$LAST_MATCH_START[0]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-03
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        相关资源
        最近更新 更多