备用匹配捕捉值

问题描述:

我有一个看起来像这样备用匹配捕捉值

MH = Calcimycin 
AQ = AA 
MED = *62 

我想要做的就是捕捉从具有MHMED,因为它的标题行的值的数据。 什么是单一的正则表达式来实现呢?

我试过,但失败:

my ($mem) = $line =~ /^MH|^MED = (.*?)$/m; 
+0

我相信你的第二个插入符之前MED是不必要的。 –

的改变|具有正则表达式的运营商之间的非常低的优先级。

因此,你需要:

my ($mem) = $line =~ /^(?:MH|MED) = (.*?)$/m; 

More on that.

试试这个:

use strict; 
use warnings; 
use 5.010; 

my $var =<<END 
MH = Calcimycin 
AQ = AA 
MED = *62 
END 
; 

foreach my $line(split(/\n/, $var)){ 
    my ($mem) = $line =~ /^(?:MH|MED) = (.*?)$/m; 
    say "matched $mem" if (defined($mem)); 
}