アプリ版:「スタンプのみでお礼する」機能のリリースについて

正規表現でURLを抽出するには。
HTML内リンク先などのURLを正規表現で抽出したいのですが。
HTML内で表記されているURLはhttpやhttps以外にも相対URLなど様々な書き方が
できるようですが、それらを抽出する正規表現パターンはどの様に書けばよいのでしょうか?

A 回答 (1件)

「HTML内リンク先など」の"など"が気になりますが、リンクかフォームアクション先を取得するのでしたら HTML::LinkExtor モジュールを使う方法があります。



(表示がくずれるので、スペース2文字を全角空白で書いています)
use strict;
use warnings;
use HTML::LinkExtor;
use HTTP::Response;
use HTTP::Request;
use LWP;

my $url = shift || 'http://www.google.co.jp';
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla');
$ua->timeout(10);

my $req = HTTP::Request->new( GET => $url );
my $res = $ua->request($req);
if ( $res->is_success ) {
  my $p = HTML::LinkExtor->new;
  $p->parse( $res->content );

  for my $items_ref ($p->links) {
    print $items_ref->[2], $/;
  }
}
else {
  print $res->error_as_HTML, "\n";
}


色々やっていますが、キモは
  my $p = HTML::LinkExtor->new;
  $p->parse( $res->content );

  for my $items_ref ($p->links) {
    print $items_ref->[2], $/;
  }

で、parse に html を文字列で渡しているところです。

リンクタグやフォームタグ以外で http や https 以外の URL を取得するのは困難なような気もします。html内のフォームタグでは、例えば /search と言った書き方ができます。
<form action="/search">

BODYタグ内の本文で /search という文字列が出てきたときはリンクなのか、そうでないのか判断しようがありません。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
まさに、
BODYタグ内の本文で /search などという文字列が出てきたときはリンクなのか、そうでないのか判断しようとしていました。
難しいようですね。

お礼日時:2010/05/16 23:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!