繁体   English   中英

使用Perl在HTTP响应中查找特定值

[英]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;

现在我知道在响应中将有这部分,仅出现一次

:&nbsp;<b>9570&nbsp;USD

我只想取数字9570(或任何数字),不知道如何搜索

:&nbsp;<b>

然后在那之后和之前

&nbsp;USD

我想正则表达式会有所帮助,但我无法在这里弄清楚如何使用它们。

使用正则表达式,您走在正确的轨道上。 您只需要一个表达式,并且由于您的字符串很简单,因此甚至不需要一个非常复杂的表达式。

my $content =~ m/:&nbsp;<b>([.\d]+)&nbsp;USD/;
my $price = $1;

m//是匹配的运算符。 wil =~一起告诉Perl对变量$content做一个正则表达式。 我们有一个包含价格的捕获组( () ),其内容将放入$1 [.\\d+]是一组字符。 该点只是一个点(你的价格可能有美分),以及\\d意味着所有的数字( 0 - 9 )。 +表示可能有很多这样的字符,但至少有一个。

使用这样的代码(删除HTML实体是不错的选择,但是可选):

use HTML::Entities;

my $content = ":&nbsp;<b>9570&nbsp;USD";
my $decoded = decode_entities($content); # replace &nbsp; to spaces
my ($price) = ($decoded =~ /<b>(\d+)\s*USD/);
print "price = $price\n";

解析HTML的最安全方法是在适当的CPAN模块的帮助下。 但是,一个简单的选择(如果响应很简单)可能是这样。

use strict;
use warnings;

my $str = ":&nbsp;<b>9570&nbsp;USD";

if( $str =~ m/:&nbsp;<b>(\d+)&nbsp;/ ) {
   print $1, "\n";
}

我使用了一个正则表达式,找到匹配项后该数字为$1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM