簡體   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