使用Perl正则表达式匹配字符串的一部分

时间:2019-07-08 15:45:58

标签: regex perl substring

在变量$hobbit中,我存储了值“ Emulex LPe16000”。 现在,我需要一个正则表达式来匹配“ Emulex”之后的值的“ LPe16000”部分。 请忽略任何语法错误,我是perl的新手。!

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

2 个答案:

答案 0 :(得分:5)

^表示断言字符串的开头。如果将其移到开头,则可以匹配Emulex,后跟一个空格,并使用\K来忘记匹配的内容。

然后匹配1个以上的单词字符\w+并声明字符串$的结尾

^Emulex \K\w+$

Regex demo | Perl demo

如果要打印匹配项,您的代码可能如下所示:

my $hobbit="Emulex LPe16000";
if ($hobbit =~ m/^Emulex \K\w+$/) {
    print $&;
}

答案 1 :(得分:2)

\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";

该表达式在this demo的右上角进行了说明,如果您想进一步探索或修改它,在this link中,您可以逐步观察它如何与某些示例输入匹配步骤,如果您愿意的话。