なお、.xxxのみが決めうちで、それからhttpのhまでを切り出したいと思っています。httpやhrefなどのhtmlはどは検索する文字内にたくさんありますのではやり.xxxを検索、それからhまでを切り出すことになります。
xxx.................................
<a href="http://www.ews.com/xxx/vba/lish/now/NNOW_HEADLINES.xxx"
..................................xxxxxx
こちらでいかがでしょうか
Imports System.Text.RegularExpressions Dim strData = "<html>---------xxxxxxxxxxxx---------</html>" Dim pattern As String = "<a href=""(.+?\.xxx)""" Dim re As Regex = New Regex(pattern, RegexOptions.IgnoreCase Or RegexOptions.Singleline) Dim m As Match = re.Match(strData) While m.Success Debug.Print(m.Groups(1).Value) Exit While End While
タグ以外に入っているURIも抽出したいのでしょうか。
それを見込んでするなら、正規表現までするようなものではないと考えますので、
URIの始まるところから終わるところまでをとるということでしたら
「://」〜「.xxx」を抽出し、「://」の前は、「 」(スペース)「"」で
区切られた後までのところを出すといいのでは?
以下、ソースはこちら、
Imports System Imports System.Net Imports System.IO Imports System.Text Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim strArray() As String Dim strTemp As String strArray = getURL(TextBox1.Text) Debug.Print("------------------------") For Each strTemp In strArray Debug.Print(strTemp) Next End Sub Public Function getURL(ByVal strURL As String) As String() Dim retText As String = "" Dim delimiter As String = "://" Dim delimiter2 As String = ".css" Dim strTemp As String = "" Dim strTemp2 As String = "" Dim cnt, cnt2 As Integer Dim parts, parts2 As String() Dim targetString As String = getURLStream(strURL) '://で分けて配列化する。 parts = Split(targetString, delimiter, -1, CompareMethod.Binary) For cnt = 1 To parts.Length - 1 '.cssで分けて配列化する。 parts2 = Split(parts(cnt), delimiter2, -1, CompareMethod.Binary) '.css以降がデータがあれば、「.css」が存在するということになる If parts2.Length > 1 Then strTemp = parts(cnt - 1) '://より前の文字列を調べる For cnt2 = strTemp.Length - 1 To 0 Step -1 strTemp2 = strTemp.Substring(cnt2, 1) If strTemp2 = " " Or strTemp2 = """" Or strTemp2 = " " Then 'スペースや”が入っていたところから://までのところを抽出し結合 retText = retText & strTemp.Substring(cnt2 + 1, strTemp.Length - cnt2 - 1) & "://" & parts2(0) & delimiter2 & vbCr Exit For End If Next End If Next Return retText.Split(vbCr) End Function 'URLを文字列として拾ってくる Private Function getURLStream(ByVal strURL As String) As String Dim ret As String = "" Dim myUri As New Uri(strURL) Dim myHttpWebRequest As HttpWebRequest = WebRequest.Create(myUri) Dim myHttpWebResponse As HttpWebResponse = myHttpWebRequest.GetResponse() If (myHttpWebResponse.StatusCode = HttpStatusCode.OK) Then Dim receiveStream As Stream = myHttpWebResponse.GetResponseStream() Dim readStream As New StreamReader(receiveStream, Encoding.GetEncoding("shift-jis")) ret = readStream.ReadToEnd() readStream.Close() myHttpWebResponse.Close() End If Return ret End Function End Class
コメント(4件)
不適切な回答者だから、答えられないけど、ヒントにでもなれば・・・。
http://q.hatena.ne.jp/1261132248
簡単に言うとURIを抜き出したいのでしょうか。
https://やhttp://などのURIから抜き出したいのでしょうか?
ftp://やmailto://、telnet://とかもでしょうか?
「.xxxを含んでいるリンクと含んでないリンクがある」からでしょ。
動作コストが問題になるなら、
InStr で .xxx を探して、そこから InStrRev で httpまで戻る方が、
早いかもしれんから、コメントには入れたけど、所詮はVBって事で、
単純に正規表現が楽だとは思うね。既に回答あるし、ここまでじゃないかな。
一応 InStrRev は下記。
http://msdn.microsoft.com/ja-jp/library/t2ekk41a(VS.80).aspx