Perl Regex中用于捕获值的替代匹配

时间:2011-11-18 07:14:47

标签: regex perl

我有一个看起来像这样的数据

MH = Calcimycin
AQ = AA 
MED = *62

我想要做的是从MHMED作为标题的行中捕获值。 实现这一目标的单一正则表达式是什么?

我尝试了但失败了:

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

2 个答案:

答案 0 :(得分:5)

更改|在正则表达式运算符中的优先级非常低。

所以你需要:

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

More on that.

答案 1 :(得分: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));
}