正则表达式在HTML代码中查找hrefs和img src的链接

时间:2016-05-26 11:58:14

标签: regex excel-vba vba excel

我想创建一个与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>

我尝试了类似这样的东西,但它匹配我不需要这个而不是我需要这个

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

我尝试添加负面前瞻,但无论我把它放在哪里,都是因为我根本没有添加它。我不确定我是否理解否定前瞻,但我尝试添加(?!&lt; / a&gt;)。

我使用正则表达式找到彼此靠近的单词,并且它有效,但它确实不是非常优雅的解决方案:)当0到7个单词之间的距离时,它找到href和img src:

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

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

2 个答案:

答案 0 :(得分:1)

使用MSHTML解析器:

didEnterRegion

您可能需要删除前导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 前缀。

答案 1 :(得分:0)

这是另一种解决方案。

(href="([^"]+).*(?=img src))|(img src="([^"]*))
  1. 检查href =“
  2. 在下一个“ - &gt;您感兴趣的第一组
  3. 之前返回所有内容
  4. 但仅限于img src跟随(正向前瞻)
  5. 检查img src =“
  6. 在下一个“ - &gt;您感兴趣的第二组
  7. 之前返回所有内容

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