返回字符串匹配的值

时间:2011-04-07 19:16:37

标签: regex perl awk pattern-matching

假装我在awk中有代码:

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

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

提前致谢。

3 个答案:

答案 0 :(得分:3)

我将其翻译为:

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

答案 1 :(得分:3)

我通常会做类似

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

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

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

答案 2 :(得分:1)

可能是:

$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]);