好的,所以我做了一个 HTTPWEBREQUEST 并且我已经在 Richtextbox 中显示了结果的来源,现在说我在 Richtextbox 中有这个
<p>Short URL: <code><a href="http://URL.me/u/eywnp">http://URL.me/u/eywnp</a></code></p>
我将如何获得“ http://URL.me/u/eywnp ” 我试过拆分但没有用,猜我做错了吗?
注意 URL 每次都会不同
好的,所以我做了一个 HTTPWEBREQUEST 并且我已经在 Richtextbox 中显示了结果的来源,现在说我在 Richtextbox 中有这个
<p>Short URL: <code><a href="http://URL.me/u/eywnp">http://URL.me/u/eywnp</a></code></p>
我将如何获得“ http://URL.me/u/eywnp ” 我试过拆分但没有用,猜我做错了吗?
注意 URL 每次都会不同
Split
不是适合这项工作的工具。这将导致一段相当复杂且非常脆弱的代码(这意味着只要输入发生最轻微的变化,它就会中断)。
对于一个健壮的、编写良好的解决方案,您需要正确解析 HTML。幸运的是,为此存在罐头解决方案:HtmlAgilityPack 库。
Dim doc As New HtmlDocument()
doc.LoadHtml(yourCode)
Dim result = doc.DocumentElement.SelectNodes("//a[@href]")(0)("href")
这里唯一复杂的部分是字符串"//a[@href]"
。这是一个XPath字符串。XPath 字符串是一种微型语言,用于对 HTML 或 XML 文档中的元素进行寻址。它们在概念上类似于文件路径(如C:\Users\foo\Documents\file.txt
),但语法略有不同。
XPath 只是从文档中选择所有<a>
具有属性的元素。href
然后,您可以获取该集合中的第一个并检索该href
属性的值。
感谢您的所有帮助,我确实找到了解决方案并且我使用了
Dim iStartIndex, iEndIndex As Integer
With RichTextBox1.Text
iStartIndex = .IndexOf("<p>Short URL: <code><a href=") + 29
iEndIndex = .IndexOf(""">", iStartIndex)
Clipboard.SetText(.Substring(iStartIndex, iEndIndex - iStartIndex))
End With
到目前为止工作完美