Web ページのテキストを取得できます。たとえば、https://stackoverflow.com/questions にいくつかの実際のリンクと作成されたリンクがあるとします。
/質問 /タグ /questions?sort=投票 /questions?sort=active ランダムページ.aspx ../coolhomepage.aspx
元のページがhttps://stackoverflow.com/questionsであることを知っていて、.Net でこれへのリンクを解決する方法はありますか?
https://stackoverflow.com/questions https://stackoverflow.com/tags https://stackoverflow.com/questions?sort=votes https://stackoverflow.com/questions?sort=active https://stackoverflow.com/questions/randompage.aspx https://stackoverflow.com/coolhomepage.aspx
ブラウザがリンクを解決するのに十分スマートな方法のようなものです。
=========================== 更新 - David のソリューションを使用:
'すべての <a ... /a> リンクに一致する正規表現 Dim myRegEx As New Regex("\<\s*a (?# Find opening <a tag) " & _ ".+?href\s*=\s*['""] (?# ではすべて href=' または "" ) " & _ "(?<href>.*?)['""] (?# その後、すべて次の ' または "" ) " & _ ".*?\> (?# それではすべて > ) " & _ "(?<name>.*?)\<\s*/a\s*\> (?# それではすべて </a> ) ", _ RegexOptions.IgnoreCase または _ RegexOptions.IgnorePatternWhitespace または _ RegexOptions.Multiline) 'マッチしたすべてのリンクを保持するMatchCollection myMatchCollection を MatchCollection として暗くする myMatchCollection = myRegEx.Matches(Me._RawPageText) 'すべての一致をループし、href 属性の値を評価します。 For i As Integer = 0 To myMatchCollection.Count - 1 thisLink を文字列として暗く = "" thisLink = myMatchCollection(i).Groups("href").Value() 'これは Javascript と Mailto リンクをチェックします。 「これは完全ではありません。他にも確認すべきことがありますが、まだ遭遇していません。 If thisLink.ToLower.StartsWith("javascript") Then thisLink = "JAVASCRIPT: " & thisLink ElseIf thisLink.ToLower.StartsWith("mailto") Then thisLink = "MAILTO: " & thisLink そうしないと Dim baseUri As New URI(Me.URL) If Not thisLink.ToLower.StartsWith("http") Then 'これは部分的な URL であるため、元の URL に対して相対的であると想定します Dim myUri As New URI(baseUri, thisLink) thisLink = "相対ローカル リンク: 解決済み: " & myUri.ToString() & "オリジナル: " & thisLink そうしないと 'リンクは HTTP で始まり、ベース ホストの一部であるか、ホストの外部にあるかを判断します。 Dim ThisUri As New URI(thisLink) If ThisUri.Host.ToLower = baseUri.Host.ToLower Then thisLink = "INSIDE COMPLETE LINK: " & thisLink そうしないと thisLink = "外部リンク: " & thisLink 終了条件 終了条件 終了条件 '見つかったリンクを Generic.List(Of String) に保存しています 「このリンクには説明文が追加されています。 'TODO: 一意の内部リンクのみを保持するコレクションを作成します。 Me._Links.Add(thisLink) 次