Perl正则表达式问题,最后一个字符被截断

时间:2014-03-11 18:54:18

标签: regex perl

我的正则表达式有一个奇怪的问题。

我的正则表达式是截断最后一个字符,在下面的例子中它应该返回值32,但它返回3。

请注意,该值最多可达10位!!!

$word = "thisisit=";
$line = "hello thisisit=32 byefornow ";   

if ($line =~ m/$word(.*?)\d /) 
{
    print $1;    #returns 3 instead of 32
}

感谢。

2 个答案:

答案 0 :(得分:5)

你可以这样做:

if ($line =~ /$word(\d+)/) # This will capture all numbers after your $word
{
    print $1;   
}

您还可以优化为:

if ($line =~ /$word\s*(\d+)/) # In case you're having like "thisisit=   32 byefornow"

或者,捕获所有内容并在第一个空格后停止:

if ($line =~ /$word(.+?)\s/) 
{
    print $1;   
}

答案 1 :(得分:1)

您应该要求它返回零或任意位数:

($line =~ m/$word(.*?)\d* /)

至少一位数字:\ d +

两位数字:\ d {2}

根据规格,我不确定你在寻找什么。