我正在尝试捕获正则表达式组中此行中的最后一位数字:
输入:
9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 54654
我的模式:
/Power_On_Hours.+Always\s.+([0-9]{1,5})/
我似乎无法捕获“54654”,它正在返回undef :(
答案 0 :(得分:9)
实际上,捕获组应该抓住'4',而不是取消。你的最终.+
将占用所有内容,直到最后一位数,然后将其捕获到$1
。此修订版捕获$1
的所有数字:
/Power_On_Hours.+Always\s.+?(\d{1,5})/
?
使.+
非贪婪,因此它会匹配字符(\d
)开始匹配时的字符。
答案 1 :(得分:4)
正如Friedo所指出的那样,问题是您的上一个.+
是贪婪的(默认行为),您可以通过将其更改为.+?
来修复它。
但我可能会使用$
来匹配行尾,所以:
/Power_On_Hours.+Always.+?(\d+)$/
答案 2 :(得分:1)
#!/usr/bin/perl
use strict; use warnings;
my $s = q{9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 54654};
my ($interesting) = $s =~ /([0-9]{1,5})\z/;
print "$interesting\n";
答案 3 :(得分:1)
如果您的数字始终为最后一位,
$string= q(9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 54654);
@s = split /\s+/,$string;
print $s[-1]."\n";
如果最后的数字可以是任何长度
/.+Power.+Always.+[^\d](\d+)$/;
答案 4 :(得分:1)
您也可以使用以下代码,
use strict;
use warnings;
my $string= q(9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 54654);
my @array = split /\s+/,$string;
print "$array[$#array]\n";
答案 5 :(得分:0)
该行的最后一组数字,对吗?
my ($digits) = $input =~ /(\d+)$/;
$
符号将一个或多个数字(\d+)
的组锚定到字符串的末尾。
答案 6 :(得分:0)