在变量$hobbit
中,我存储了值“ Emulex LPe16000”。
现在,我需要一个正则表达式来匹配“ Emulex”之后的值的“ LPe16000”部分。
请忽略任何语法错误,我是perl的新手。!
$hobbit="Emulex LPe16000"
if ($hobbit = ~m/Emulex ^\w+$/)
print "lol";
答案 0 :(得分:5)
^
表示断言字符串的开头。如果将其移到开头,则可以匹配Emulex
,后跟一个空格,并使用\K
来忘记匹配的内容。
然后匹配1个以上的单词字符\w+
并声明字符串$
的结尾
^Emulex \K\w+$
如果要打印匹配项,您的代码可能如下所示:
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中,您可以逐步观察它如何与某些示例输入匹配步骤,如果您愿意的话。