1

私は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

正規表現が役立つと思いますが、ここでそれらを使用する方法がわかりません。

4

3 に答える 3

3

あなたは正規表現で正しい軌道に乗っていました。必要な式は 1 つだけです。文字列は単純なので、非常に複雑な式は必要ありません。

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

m//一致する演算子です。一緒=~に、変数に正規表現を行うように Perl に指示します$content()価格を含むキャプチャ グループ ( ) があり、その内容は に入り$1ます。は[.\d+]文字のグループです。ドットは単なるドット (価格にはセントが含まれる場合があります) であり、\dすべての数字 ( 0- 9) を意味します。これらの+キャラクターはたくさんいるかもしれませんが、少なくとも1人はいると言われています.

于 2013-06-09T09:26:24.917 に答える
1

次のようなコードを使用します (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";
于 2013-06-09T09:26:13.187 に答える
1

HTML を解析する最も安全な方法は、適切な CPAN モジュールを使用することです。しかし、単純な代替手段 (応答が単純な場合) はこれかもしれません。

use strict;
use warnings;

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

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

正規表現を使用し$1ました。一致が見つかったときの番号です。

于 2013-06-09T09:27:27.897 に答える