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