我试图捕捉到这一行的最后一个数字的正则表达式组:如何在Perl中捕获字符串末尾的数字组?
输入:
我的模式9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 54654
:我只是不能似乎
/Power_On_Hours.+Always\s.+([0-9]{1,5})/
得到它捕获“54654”,它是undef :(
我试图捕捉到这一行的最后一个数字的正则表达式组:如何在Perl中捕获字符串末尾的数字组?
输入:
我的模式9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 54654
:我只是不能似乎
/Power_On_Hours.+Always\s.+([0-9]{1,5})/
得到它捕获“54654”,它是undef :(
其实,捕获g群应抓住'4',而不是undef。你的最终.+
会吃掉一切,直到最后一位数字,然后将其捕获到$1
。本次修订捕获所有的数字来$1
:
/Power_On_Hours.+Always\s.+?(\d{1,5})/
的?
使.+
非贪婪的,所以它会匹配字符最多时数字(\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";
正如friedo指出的那样,问题在于您最近的.+
是贪婪(默认行为),您可以通过将其更改为.+?
来修复它。
但我可能会使用$
匹配行尾,所以:
/Power_On_Hours.+Always.+?(\d+)$/
如果你的数字是总是在最后,
$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+)
,到字符串的末尾。
您可以使用下面的代码也
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";
Friedo,你是神我的朋友。而已! – JPerkSter