[英]Finding a particular value in an HTTP response using Perl
我在Perl中有一个小脚本,HTTP POST请求
my $request = $ua->post( $url, [ 'country' => 10, 'evalprice' => 0 ] );
my $response = $request->content;
现在我知道在响应中将有这部分,仅出现一次
: <b>9570 USD
我只想取数字9570(或任何数字),不知道如何搜索
: <b>
然后在那之后和之前
USD
我想正则表达式会有所帮助,但我无法在这里弄清楚如何使用它们。
使用正则表达式,您走在正确的轨道上。 您只需要一个表达式,并且由于您的字符串很简单,因此甚至不需要一个非常复杂的表达式。
my $content =~ m/: <b>([.\d]+) USD/;
my $price = $1;
m//
是匹配的运算符。 wil =~
一起告诉Perl对变量$content
做一个正则表达式。 我们有一个包含价格的捕获组( ()
),其内容将放入$1
。 [.\\d+]
是一组字符。 该点只是一个点(你的价格可能有美分),以及\\d
意味着所有的数字( 0
- 9
)。 +
表示可能有很多这样的字符,但至少有一个。
使用这样的代码(删除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";
解析HTML的最安全方法是在适当的CPAN模块的帮助下。 但是,一个简单的选择(如果响应很简单)可能是这样。
use strict;
use warnings;
my $str = ": <b>9570 USD";
if( $str =~ m/: <b>(\d+) / ) {
print $1, "\n";
}
我使用了一个正则表达式,找到匹配项后该数字为$1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.