首页 > 解决方案 > 正则表达式:在 2 个不同的 html 标记中查找那些不包含相同链接的文件

问题描述

我有 1000 多个 html 文件。我需要用 REGEX 找出一个链接<link tag>是否在同一文件的另一个位置重复。

例如,在第一行有一个<link tagwith this link https://mywebsite.com/en/truth.html

在下面,<img tag我有另一个链接https://mywebsite.com/en/love.html

<link rel="canonical" href="https://mywebsite.com/en/truth.html" />

text text
    
text

<img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a>&nbsp; <a href="https://mywebsite.com/en/love.html"><img src="index_files/flag_lang_ru.jpg" width="28" height="19" title="ru" alt="ru" /></a>

使用正则表达式后,我应该在 2 个不同的 html 标记中找到那些不包含相同链接的文件。我做了一个正则表达式,但不是很好。

这可以从 <link 标签中找到第一个链接:(<link rel="canonical" href="(.*?)" \/>.*?) 这可以从 <img 标签中找到第二个链接:(alt="de" /></a>&nbsp; <a href=").*?("><img src)

?!用来排除第二个链接,所以正则表达式是:

查找:(.匹配换行符)

(<link rel="canonical" href="(.*?)" \/>.*?)(?!(alt="de" /></a>&nbsp; <a href=")).*?("><img src)

但是不起作用,它会找到两个链接,即使它们是相同的。我应该找到不包含上下相同链接的文件。

标签: regexnotepad++

解决方案


这很粗略,但根据您上面的示例,它应该足够了:

在此处输入图像描述

关于这一点的几点:

  • http...meta标签中获取,这假定一个绝对 url,而不是/例如,如果任何meta标签中有多个 url,你也想检查它。
  • 我只是使用 a.*\1来查看捕获的链接是否出现在文本中的其他任何地方(甚至在标签之外)——如果你只希望它在一个标签内,也许将它包装在你想要找到它的标签中,例如:<a href="\1"
  • 确保设置了 dot-matches-newline 选项(或使用另一个字符类)。

推荐阅读