2011-04-07 59 views
0

返回值假装我有一个代码在AWK:为字符串匹配

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

然后NUM_1将是 “123”。什么是相同任务的Perl版本?

在此先感谢。

回答

3

我想那意思就是:

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

谢谢!所以如果我把这个字符串扩展为“abc123def456ghi789jkl”,那么[0] = 123; [1] = 456等...这是正确的吗? – GaryHull 2011-04-07 21:22:13

+0

@gary,的确是 – 2011-04-08 01:54:50

+0

我想你需要添加'/ g'修饰符来完成这个工作。 – 2011-04-08 19:22:35

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

我通常会做这样的事情

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

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

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