電子書籍の厳選無料作品が豊富!

VB.NETなのですが、

htmlソースを変数に入れて、その中からURLを抽出して、
1つずつ保存していくという動作をさせたいのですが、
どうしてもURLを一つずつ取得することができません。

Dim r As Regex
Dim m As Match
Dim JpgFile As String

r = New Regex("http://.+\.jpg")
m = r.Match(html)

If m.Success = False Then
  Else
JpgFile = m.Value
ここで1つずつ保存
End If

現在、ここまで出来たのですが、
これだと、変数html内に複数のjpgのURLがあると
最初のURLの1文字目から、最後のURLの末尾までを一度に
取得してしまいます。
URLの文字列はhttp://で始まっていて、終わりは・・・.jpg"
になっていたり、"がなかったりします。
>で閉じる前に同じタグ内にWidthなどサイズを指定している場合もあります。
また、上記のようにタグ内に書かれていなくて、クリッカブルリンクになっていないURLの場合もありそれも取得したいです。

一つずつ取得する方法や一度に配列に読み込む方法などがありましたら、
ご教示頂けると助かります。
よろしくお願い致します。

A 回答 (1件)

> URLの文字列はhttp://で始まっていて、終わりは・・・.jpg"


この条件だけ満たすなら、
New Regex("​http://.+​\.jpg")

正規表現の繰り返し指定(*とか+など)はできるだけ長いマッチを
とろうとします。このため、.+ が複数のURLを食ってしまっている
というわけです。
#085 正規表現の落とし穴
http://www.ne.jp/asahi/futohen/sankaku/h085.htm

今回の場合とりあえず正規表現を "http://.+?\.jpg" にすればいいです。
量指定子
http://msdn2.microsoft.com/ja-jp/library/3206d37 …

htmlテキスト丸ごと与えて、その中からすべて取り出したいのなら
Regex.Matchesメソッドを使えば一発でできます。
一つずつ処理するならイテレータを、一度に配列に取り出したいのなら
CopyToメソッドを使えばいいでしょう。

Regex.Matches メソッド (String) (System.Text.RegularExpressions)
http://msdn2.microsoft.com/ja-jp/library/e7sf90t …
    • good
    • 0
この回答へのお礼

大変よくわかりました。
詳しいご回答ありがとうございました。
助かりました。勉強になります。

お礼日時:2007/06/29 05:24

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