Как я могу захватить группу цифр в конце строки в Perl? - PullRequest
3 голосов
/ 17 февраля 2010

Я пытаюсь захватить последние цифры в этой строке в группе регулярных выражений:

Ввод:

9 Power_On_Hours          0x0032   099   099   000    Old_age   Always       -       54654

Мой рисунок:

/Power_On_Hours.+Always\s.+([0-9]{1,5})/

Я просто не могу заставить его захватить "54654", он возвращает undef: (

Ответы [ 7 ]

9 голосов
/ 17 февраля 2010

На самом деле, эта группа захвата должна взять '4', а не undef.Ваш последний .+ сожрет все до последней цифры, а затем перехватит ее до $1.Эта ревизия фиксирует все цифры до $1:

/Power_On_Hours.+Always\s.+?(\d{1,5})/

. ? делает .+ не жадным, поэтому он будет соответствовать символам до того момента, когда цифры (\d) начнутматч.

4 голосов
/ 17 февраля 2010

Как заметил Фридо, проблема в том, что ваш последний .+ является жадным (поведение по умолчанию), и вы можете исправить это, изменив его на .+?.

Но я бы, вероятно, использовал $ для соответствия конца строки, поэтому:

/Power_On_Hours.+Always.+?(\d+)$/
1 голос
/ 01 марта 2010

Вы также можете использовать следующий код,

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";
1 голос
/ 18 февраля 2010

если ваши цифры всегда последние,

$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+)$/;
1 голос
/ 17 февраля 2010
#!/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";
0 голосов
/ 07 марта 2014
(?:Power_On_Hours.+Always\D*)(\d+)

Это сработало на меня

http://regex101.com/r/oS8sO5

0 голосов
/ 21 февраля 2010

Последняя группа цифр в строке, верно?

my ($digits) = $input =~ /(\d+)$/;

Знак $ привязывает группу из одной или нескольких цифр, (\d+), к концу строки.

...