【发布时间】: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
假装我在 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
我会把它翻译成:
my $num_1 = ($str_1 =~ /(\d+)/)[0];
【讨论】:
/g 修饰符才能使其正常工作。
我通常会做类似的事情
my ($num_1) = $str_1 =~ /(\d+)/;
或
my $num_1;
if ($str_1 =~ /(\d+)/) {
$num_1 = $1;
}
在 Perl 的模式中,\d 等效于 ASCII 字符串的[0-9]。
【讨论】:
可能是:
$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]);
【讨论】: