2011-11-18 50 views
2

我有一個看起來像這樣備用匹配捕捉值

MH = Calcimycin 
AQ = AA 
MED = *62 

我想要做的就是捕捉從具有MHMED,因爲它的標題行的值的數據。 什麼是單一的正則表達式來實現呢?

我試過,但失敗:

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

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

回答

5

的改變|具有正則表達式的運營商之間的非常低的優先級。

因此,你需要:

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

More on that.

1

試試這個:

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)); 
}