REGEX:在 2 个不同的 html 标签中查找那些不包含相同 link 的文件

REGEX: Find those files that doesn't contain the same link in 2 different html tags

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

比如第一行有一个<link tag 和这个link https://mywebsite.com/en/truth.html.

下面一个 <img tag 我还有一个 link 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="(.*?)" \/>.*?) 这可以从 (alt="de" /></a>&nbsp; <a href=").*?("><img src)

并且我使用 ?! 来排除第二个 link,所以正则表达式是:

查找:(.匹配换行符)

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

但是没有用,它找到了两个 link,即使它们是一样的。我应该找到上下不包含相同 link 的文件。

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

关于此的一些事情:

  • 我正在从 meta 标签中获取 http...,这假设是绝对 url 而不是 / 例如,如果有多个 urls 在您想要检查的任何 meta 标签中。
  • 我只是使用 .* 来查看捕获的 link 是否出现在文本的其他任何地方(甚至在标签之外)——如果您只希望它在标签内,也许将其包装在您要查找的标签中,例如:<a href="".
  • 确保点匹配换行选项已设置(或使用其他字符 class)。

解决办法:

查找:(?s)<link\h+rel="canonical"\h*\Khref="([^"]+)"((?!<link).)+?<a href="(?!).+?"

查找:(?s)^<link rel.+?https://([^"]+).+?https://(*SKIP)(?!)

或(.匹配换行符)

查找:<link rel="canonical"[^>]*"(https[^"]+)"[^>]*>.*?()

感谢找到此答案的人HERE