Назад | Перейти на главную страницу

Regex - соответствует третьему числу перед символом

У меня есть такая строка:

/dev/sda1      23G   46G  47G  22%

И хотите сопоставить только целое число в 47место.

Я попытался изменить пример "совпадения второго набора чисел" (т. Е.\d+[^\d*](\d+)) здесь, чтобы он соответствовал третьему набору (например, http://perlmeme.org/faqs/regexp/regexp.html, но я не могу найти совпадение.

Любая идея, как сопоставить только целое число в 47место?

Вот подробный пример:

$string = '/dev/sda1      23G   46G  47G  22%';

my ( $number ) = $string =~ m|^/[\S]+/[\S]+\s+\d+\w\s+\d+\w\s+(\d+)|;

print $number;

Или, если вы хотите, чтобы регулярное выражение было более разложенным:

my $string = '/dev/sda1      23G   46G  47G  22%';

my ( $number ) = $string =~ m|
        ^/[\S]+/[\S]+\s+    # drive
        \d+\w\s+        # first number - ignored
        \d+\w\s+        # second number - ignored
        (\d+)           # third number - CAPTURED
    |x;

print "$number\n";

^\S+\s+\S+\s+\S+\s+(\d+) подействовал бы, но я бы рекомендовал вместо этого разбить на пробелы и взять четвертую группу.