预定义的子模式与已编译的正则表达式

时间:2015-06-16 13:28:52

标签: regex perl

为什么在编译的正则表达式可以执行相同操作时使用预定义的子模式。似乎编译的正则表达式更好,因为你也可以捕获输出。这是一个例子:

my $open_tag  = qr {<head>};
my $any       = qr {.*?};
my $close_tag = qr {</head>};

if (/($open_tag) ($any) ($close_tag)/x){
  print $1;
  print $2;
  print $3;
}

对战:

if (m {
           (? (DEFINE)
               (? <OPEN_TAG>  <head>  )
               (? <ANY>       .*?     )
               (? <CLOSE_TAG> </head> )
            )
           (?&OPEN_TAG) (?&ANY) (?&CLOSE_TAG)
         }x
)

### Won't work below
print $1; print $2; print $3;
}

请记住,我对Perl很新。 提前致谢。 -Tim

1 个答案:

答案 0 :(得分:1)

使用qr //:

的两个原因
  1. 您提出的替代方案依赖于新功能。

  2. 传递给qr //的模式不一定是硬编码或常量。