正規表現グループのこの行の最後の数字をキャプチャしようとしています:
入力:
9 Power_On_Hours 0x0032 099 099 000 Old_age 常に - 54654
私のパターン:
/Power_On_Hours.+Always\s.+([0-9]{1,5})/
「54654」をキャプチャすることができないようです.undefを返しています:(
frido が指摘したように、問題はあなたの last.+
が貪欲 (デフォルトの動作) であり、それを に変更することで修正できること.+?
です。
しかし、おそらく$
行末に一致させるためにを使用するので、次のようにします。
/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+)$/;
次のコードも使用できます。
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";
行の最後の数字のグループですよね?
my ($digits) = $input =~ /(\d+)$/;
$
記号は、1つ以上の数字のグループを文字列の最後に固定します(\d+)
。