我正在尝试在正则表达式组中捕获此行中的最后几位数字:
输入内容:
9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 54654
我的模式:
/\b(\d+)$/
/Power_On_Hours.+Always\s.+([0-9]{1,5})/
我似乎无法捕获“54654”,它返回未定义值:(
实际上,该捕获组应该抓取'4'而不是undef。您最终的.+
将吞掉直到最后一个数字的所有内容,然后将其捕获到$1
。此修订版将所有数字都捕获到$1
:
/Power_On_Hours.+Always\s.+?(\d{1,5})/
?
的作用是使 .+
变成非贪婪模式,这样它只匹配字符直到数字 (\d
) 开始匹配为止。.+
是贪婪模式(默认行为),你可以通过将其更改为.+?
来解决这个问题。$
来匹配行尾, 因此:/Power_On_Hours.+Always.+?(\d+)$/
#!/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";
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";
如果您的数字总是在最后,
$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+)$/;
这行中的最后一组数字,对吗?
my ($digits) = $input =~ /(\d+)$/;
$
符号将一个或多个数字组((\d+)
)锚定到字符串的结尾。