- ベストアンサー
正規表現でURLを抽出するには。
正規表現でURLを抽出するには。 HTML内リンク先などのURLを正規表現で抽出したいのですが。 HTML内で表記されているURLはhttpやhttps以外にも相対URLなど様々な書き方が できるようですが、それらを抽出する正規表現パターンはどの様に書けばよいのでしょうか?
- akaginoyama
- お礼率88% (635/715)
- Perl
- 回答数1
- ありがとう数2
- みんなの回答 (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 という文字列が出てきたときはリンクなのか、そうでないのか判断しようがありません。
関連するQ&A
- 正規表現でのURLの抽出方法について
下記のような、ドメインとURLの最後の部分(/dataの部分) が一緒で、途中の表記が違うURLがあったとします。 http://hogehoge.com/aaa/data http://hogehoge.com/aaa/bbb/data http://hogehoge.com/ddd/eee/data このようなURLを正規表現を使って抽出するには、どのように記述したらいいしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- URL\正規表現@java
perlメモさん?にPerlでのURLの正規表現はあるのですが Javaで使いたいと思います。 Pattern pattern = Pattern.compile("正規表現"); Matcher matcher = pattern.matcher(String); のステートメントを使う方法をご存知な方おられませんか? Perlメモさん?の正規表現をエディタにコピペしても 不正なエスケープエラー?がでてだめでした。 (http Urlのごちゃごちゃした奴の下から二番目) (「\b(?:」で始まる奴です) なのでエディタに貼り付けて\を\\に置き換えたものを 正規表現の部分にしたところコンパイルはとおりましたが、 正確にマッチしてくれませんでした。 よろしくお願いします。
- ベストアンサー
- Java
- 特定のURLを正規表現で配列抽出。@PHPで
下記URLの中の特定の画像リンクURL群を PHPを使って配列で抽出したいです。 https://gdata.youtube.com/feeds/api/videos?v=2&alt=json&max-results=50&q=%E7%8C%AB 特定の部分は下記のようにhogehoge以外は共通の文字列で3種類あります。 http://i.ytimg.com/vi/hogehoge/default.jpg http://i.ytimg.com/vi/hogehoge/mqdefault.jpg http://i.ytimg.com/vi/hogehoge/hqdefault.jpg 各々、正規表現を利用して抽出して配列に入れたいのですがどのようにすればよいのかわかりません。><; $defaultArr $mqArr $hqArr 当方、正規表現が呪文にしか見えない初心者です。 正規表現の意味まで説明して頂けれると大変助かります。 申し訳ありませんがご教授のほどよろしくお願い致します。
- 締切済み
- PHP
- perl 正規表現 抽出
perl の正規表現を用いて、文字列の抽出を行いたいのですがどのように 書けばいいのかわかりません。 実現したいことは 「Y:/フォルダ名/フォルダ名/ファイル名.拡張子」 というテキストに対して 「拡張子」のみを抽出することと 「ファイル名」のみを抽出することです。 パターンマッチや変換はなんとなくわかるのですが 抽出の仕方がよくわかりません。 よろしくお願いいたします。
- ベストアンサー
- Perl
- URLを抽出する正規表現
<h3 class="r"><a href="/url?q=http://aaa.co.jp/index.html&sa=U&ei=CuI5T_2iLO7ymAWt6tGlCw&ved=0CBoQFjAB&usg=AFQjCNHEkBnpOAp3vxF9loM0Vk_AuM2e3Q"> 上記のものから http://aaa.co.jp/index.html のみ抽出する正規表現を教えてください。 よろしくお願いします。
- ベストアンサー
- PHP
- URLの正規化がうまくできません。
只今、URLの正規化を行っておりまして、「www有り無し」はhtaccessを使用し、うまくいったのですが「index.html有り無し」が何度やってもうまくいきません。 そこで、自分のサイト内のリンクを全て、相対パスから絶対URLへと修正したのですが、まだ正規化ができてません・・・現在サイトは50ページぐらいのものなので見逃してはないと思うのですがもしどこかに相対パスが残っているのであれば、それを調べる方法はあるのでしょうか? また、他に原因がある可能性があるのでしょうか? この件で3日程、悩んでおります。 是非、どなたかお答え頂けましたら助かります。
- ベストアンサー
- HTML
- Javaの正規表現を使った画像URLの自動リンクができません
Java(version 1.5.0_05)の正規表現を使った画像URLの自動リンクで 行き詰っています。 通常のリンクタグは pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:&?,=#]+",Pattern.CASE_INSENSITIVE); でうまく変換できているのですが、 画像の場合、 pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:&?,=#]+(jpg|jpeg|gif|png|bmp)",Pattern.CASE_INSENSITIVE); としてもマッチせず、 変換ができません。 正規表現が間違えているのは分かっているのですが、 どこをどう変えたらよいのか教えてください。 宜しくお願いいたします。
- ベストアンサー
- Java
- 正規表現入門などを見て、CSVを抽出する正規表現を調べています。
正規表現入門などを見て、CSVを抽出する正規表現を調べています。 ("(?:[^"]|"")*"|[^,]*), (?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*) などで、コロンの意味がわかりません。 どなたかわかる方、いらっしゃれば、お願いします。
- 締切済み
- Visual Basic
- 正規表現を使って?
置換の正規表現を使ってこのURLを (例) <A href="http://123.com/456/789/"><IMG src="http://123/456/789.jpg" border="0"></A> <A href="http://123.com/456/789/">リンク先</A> このようにしたいです。 <A href="http://tesuto=http%3A%2F%2F123.com%2F456%2F789%2F"><IMG src="http://123/456/789.jpg" border="0"></A> <A href="http://tesuto=http%3A%2F%2F123.com%2F456%2F789%2F">リンク先</A> :は%3aに /は%2fに 最後にリンク先のURLにhttp://tesuto=を追加したいです。 (<IMG src="からのURLはそのままにしたいです。) ちなみにhtml内には様々なタグが入っていてリンク先も様々なURLが書かれているとします。 (http://123.com/456/789/やhttp://123.com/456/789/abc/dehg/など) 正規表現についてはまったく分からず悩んでいます。 どなたかよろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- 正規表現で指定したURLに飛びたいのですが・・・・
お世話になっております。 VB2005ユーザーです。 こちらで回答をいただくみなさんには頭が下がる思いでいっぱいです。 もう少々、お力をお貸しいただけませんか。 宜しくお願いいたします。 当方、環境はVB2005です。 WebBrowserにて、HTMLを操作していくプログラムに挑戦しています。 ある特定の文字列のリンクに飛ぶには、正規表現を使用し、URLを抽出するというところまでわかったのですが、 この正規表現の部分をwindowsフォーム内のテキストボックスの文字列にするにはどのようにしたらよいでしょうか? 以下は当方がチャレンジしましたが、無理だったパターンです。 Dim r As Regex = New Regex( _ "<a\s+[^>]*href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>[^\s>]+))[^>]*\s*.*" + TextBox1.text, _ RegexOptions.IgnoreCase Or RegexOptions.Compiled) Dim m As Match = r.Match(.Document.Body.InnerHtml) Dim St As String = m.Groups(1).Value '拾ってきたコード .Navigate(St) ・・・というようにしました。 上記の「+ TextBox1.text」の部分にテキストボックス内の文字列を挿入したいのです。 「+ TextBox1.text」の箇所を「TextBox1.text"」とすれば「TextBox1.text」自体を探してしまいますし・・・。 ちょっと行き詰ってしまいまして。 ご教授いただければ幸いでございます。 宜しくお願いいたします!!
- ベストアンサー
- Visual Basic
お礼
丁寧な回答ありがとうございます。 まさに、 BODYタグ内の本文で /search などという文字列が出てきたときはリンクなのか、そうでないのか判断しようとしていました。 難しいようですね。