我在perl中碰到了一些奇怪的东西,我以为我会分享。我有一个名为" testfile.txt"。
的文本文件这是......
BLAH BLAH BLAH BLAH BLAH
The dollar amount is $2.30 today
BLAH BLAH BLAH BLAH BLAH
现在我要提取2.30。在我下面的例子中,我正在啜饮文件,它工作正常。第二种方式根本不起作用。在啜食中是否有一些魔力?
#!/usr/local/bin/perl
## THIS WORKS
my $content;
my $filename = "testfile.txt";
my $fh="FILEIN";
open(my $fh, '<', $filename) or die "cannot open file $filename";
{
local $/;
$content = <$fh>;
}
close($fh);
my $price;
($price)=$content=~m{is\s\$([0-9]{1,2}\.[0-9]{2})\stoday};
print "Result is $price\n"; #Correctly produces 2.30
## DOESN'T WORK
$content2="BLAH BLAH BLAH BLAH BLAH The dollar amount is $2.30 today BLAH BLAH BLAH BLAH BLAH";
my $price2;
($price2)=$content2=~m{is\s\$([0-9]{1,2}\.[0-9]{2})\stoday};
print "Result is $price2\n"; #Doesn't work
注意:(澄清)。如何从作业示例中提取2.30?在我的真实世界应用程序中,我被困在哪里。有人知道我是如何提取的吗? JW
答案 0 :(得分:5)
$content2="BLAH BLAH BLAH BLAH BLAH The dollar amount is $2.30 today BLAH BLAH BLAH BLAH BLAH"
由于字符串是双引号,$2
被Perl变量$2
的值替换 - 这是上一个正则表达式匹配的第二个带括号的子表达式的内容,但是&重要的是,它不是你想要的。改为使用单引号:
$content2='BLAH BLAH BLAH BLAH BLAH The dollar amount is $2.30 today BLAH BLAH BLAH BLAH BLAH'