【问题标题】:Regex to find links of hrefs and img src in HTML code正则表达式在 HTML 代码中查找 href 和 img src 的链接
【发布时间】:2016-05-26 11:58:14
【问题描述】:

我想制作一个匹配 HTML 代码中链接的正则表达式。 这是一个可以更好地解释它的例子。像这样的:

<a href="I NEED THIS1">  <img src="I NEED THIS2">  </a>  <a href="I DONT
NEED THIS" title="something">  </a>   <a href="I NEED THIS3" title="blah">
<figure> <img src="I NEED THIS4" alt="">   </figure>  </a>

我尝试了类似的方法,但它匹配 I DONT NEED THIS 而不是 I NEED THIS3

<a href="([^"]*)"\s*.*?<img src="(.*?)".*?\s*<\/a>

我尝试用 来添加负前瞻,但无论我把它放在哪里,就像我根本没有添加它一样。我不确定我理解的负前瞻是否正确,但我尝试添加 (?!)。

我使用了正则表达式来查找彼此靠近的单词,它可以工作,但它确实不是很优雅的解决方案:) 当距离为 0 到 7 个单词时,它会找到 href 和 img src:

<a href="([^"]*)"\W+(?:\w+\W+){0,7}?<img src="(.*?)".*?\s*<\/a>

它将在 Excel VBA 中使用,我正在在线正则表达式测试器网站上对其进行测试。
任何建议都会有所帮助。

【问题讨论】:

  • 如果您正在从 Web 读取 HTML,您可以使用 InternetExplorer.Application 对象。然后,您可以轻松解析 DOM,可能比使用正则表达式更容易。
  • 我需要用正则表达式来完成,并且只需要一个表达式来解决。两次通过可能会更容易,但不幸的是不允许使用它。
  • 谢谢你,维克托。看起来这是正确的正则表达式,它对我很有用。我会再测试一下。您能否尝试解释这部分表达式: (?:(?!)[\s\S])*
  • 是的,Wiktor,这绝对有效。非常感谢,你摇滚! :)

标签: regex excel vba


【解决方案1】:

使用 MSHTML 解析器:

Dim odoc As Object: Set odoc = CreateObject("htmlfile")
odoc.Open
odoc.Write htmlstr

For Each element In odoc.images
    MsgBox element.src
Next

For Each element In odoc.getElementsByTagName("a")
    MsgBox element.href
Next

您可能需要删除前导 "about:" 前缀。

【讨论】:

【解决方案2】:

这是另一个解决方案。

(href="([^"]+).*(?=img src))|(img src="([^"]*))
  1. 检查 href="
  2. 返回下一个“->您感兴趣的第一个组之前的所有内容
  3. 但前提是后面有 img src(正向前瞻)
  4. 检查 img src="
  5. 返回下一个“->您感兴趣的第二组之前的所有内容

演示:https://regex101.com/r/yS9bB4/1

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多