在Perl模式匹配中打印匹配的字符串

时间:2015-03-02 22:47:12

标签: perl

use strict;

my $type = "build";
if ($type =~ (/build|test/))
{
   print "type=$1";
}

我希望它能打印“type = build”,但$ 1什么都没有,它打印出“type =”,我做错了什么?

3 个答案:

答案 0 :(得分:2)

看起来你没有用括号捕捉任何东西,

perl -MO=Deparse -e'
  use strict;

  my $type = "build";
  if ($type =~ (/build|test/))
  {
     print "type=$1";
  }
  '

输出

use strict;
my $type = 'build';
if ($type =~ /build|test/) {
    print "type=$1";
}

/(build|test)/应完全是另一个故事。

答案 1 :(得分:1)

你没有捕获正则表达式中的任何内容。你的括号需要里面模式,就像这个

if ( $type =~ /(build|test)/ ) {
    print "type=$1";
}

答案 2 :(得分:1)

这就是人们建议使用use warningsuse strict的原因。 如果您在代码中添加use warnings,则会收到警告:

Use of uninitialized value $1 in concatenation (.) or string at type.pl line 7

代码是:

use warnings;
use strict;

my $type = "build";
if ($type =~ /(build|test)/)
{
   print "type=$1";
}