使用匹配字母和变量

时间:2017-02-24 04:04:07

标签: regex perl match

我提供了一些变量并尝试使用它们来匹配输入,但是我在匹配我想匹配的方面遇到了问题。

my $x = 1.0;

foreach ( @data ) { # see sample data below

    my $input = $_; # I know, I know...

    if ( $input =~ m/ph${x}/ ) {
        print "$input \n"; 
    }
}

输入(@data的内容):

info.ph1.0.dat_0
info.ph1.5.dat_1
info.ph2.0.dat_2

输出:

info.ph1.0.dat_0 
info.ph1.5.dat_1 

所需的输出是

info.ph1.0.dat_0

$x总是类似1.01.11.2等。

2 个答案:

答案 0 :(得分:2)

您有两个问题:

  1. 您需要将字符串文字1.0引用为Nullman pointed out
  2. 您需要在$x内正确quote any metacharacters。例如,您是否希望info.ph1x0.dat_0info.ph1*0.dat_0也匹配?好吧,他们会,因为1.0中未转义的点匹配任何角色。
  3. 修订代码:

    use strict;
    use warnings;
    use 5.010;
    
    my $x = '1.0';
    
    while (<DATA>) {
        if (/ph\Q$x/) {
            say;
        }
    }
    
    __DATA__
    info.ph1.0.dat_0
    info.ph1.5.dat_1
    info.ph2.0.dat_2
    info.ph1x0.dat_0
    info.ph1*0.dat_0
    

    输出:

    info.ph1.0.dat_0
    

答案 1 :(得分:0)

可能这一点:

my $x = 1.0;

应该是

my $x = '1.0';

这是因为perl将1.0保存为1