我在Perl中有一个小脚本,HTTP POST请求
my $request = $ua->post( $url, [ 'country' => 10, 'evalprice' => 0 ] );
my $response = $request->content;
现在我知道在回复中会出现这个部分,只出现一次
: <b>9570 USD
我想只拿9570(或者不管它是什么),我不知道如何搜索
: <b>
然后在
之前和之前采取部分 USD
我想正则表达式会有所帮助,但我无法弄清楚如何在这里使用它们。
答案 0 :(得分:3)
你使用正则表达式在正确的轨道上。你只需要一个表达式,因为你的字符串很简单,所以你甚至不需要一个非常复杂的表达式。
my $content =~ m/: <b>([.\d]+) USD/;
my $price = $1;
m//
是匹配的运算符。我们将=~
告诉Perl对变量$content
执行正则表达式。我们有一个包含价格的捕获组(()
),其内容将进入$1
。 [.\d+]
是一组字符。点只是一个点(您的价格可能有分数),\d
表示所有数字(0
- 9
)。 +
表示可能有很多这些字符,但至少有一个。
答案 1 :(得分:1)
使用这样的代码(删除HTML实体很好,但可选):
use HTML::Entities;
my $content = ": <b>9570 USD";
my $decoded = decode_entities($content); # replace to spaces
my ($price) = ($decoded =~ /<b>(\d+)\s*USD/);
print "price = $price\n";
答案 2 :(得分:1)
解析HTML的最安全方法是在适当的CPAN模块的帮助下。但是一个简单的替代方案(如果响应很简单)可能就是这样;
use strict;
use warnings;
my $str = ": <b>9570 USD";
if( $str =~ m/: <b>(\d+) / ) {
print $1, "\n";
}
我使用了正则表达式,当找到匹配项时,该数字为$1
。