Соответствие части строки с использованием регулярного выражения Perl - PullRequest
3 голосов
/ 08 июля 2019

В переменной $hobbit хранится значение «Emulex LPe16000».Теперь мне нужно регулярное выражение для соответствия части «LPe16000» значения после «Emulex».Пожалуйста, игнорируйте любые синтаксические ошибки, я новичок в Perl ..!

$hobbit="Emulex LPe16000"
if ($hobbit = ~m/Emulex ^\w+$/)
    print "lol";

Ответы [ 2 ]

5 голосов
/ 08 июля 2019

^ означает подтверждение начала строки.Если вы переместите его в начало, вы можете сопоставить Emulex с последующим пробелом и использовать \K, чтобы забыть то, что было найдено.

Затем сопоставить 1+ слов в словах \w+ и подтвердить конецстрока $

^Emulex \K\w+$

Regex demo | Perl demo

Если вы хотите напечатать совпадение, ваш код может выглядеть следующим образом:

my $hobbit="Emulex LPe16000";
if ($hobbit =~ m/^Emulex \K\w+$/) {
    print $&;
}
2 голосов
/ 08 июля 2019

\K гораздо лучший способ сделать это, но это выражение также может работать:

Emulex\s+([A-Z]+[a-z]+[0-9]+)

Тест

use strict;

my $str = 'Emulex LPe16000';
my $regex = qr/Emulex\s+([A-Z]+[a-z]+[0-9]+)/mp;
my $subst = '$1';

my $result = $str =~ s/$regex/$subst/rg;

print $result\n";

Выражение объяснено в верхней правой части этой демонстрации , если вы хотите продолжить изучение или изменить его, а в этой ссылке вы можете посмотреть, как она будет соответствовать если хотите, с некоторыми примерами ввода шаг за шагом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...