REGEX:在2个不同的html标签中找到不包含相同链接的文件

nuypyhwy  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(91)

我有超过1000个html文件。我需要找出与REGEX如果一个链接从<link tag>是重复在另一个位置在同一文件。
例如,在第一行中有一个<link tag,其链接为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)
我使用?!排除第二个链接,所以正则表达式是:
FIND:(.matches new line)
(<link rel="canonical" href="(.*?)" \/>.*?)(?!(alt="de" /></a>&nbsp; <a href=")).*?("><img src)
但不起作用,它找到两个链接,即使它们是相同的。我应该找到不包含相同链接的文件向上和向下。

7d7tgy0s

7d7tgy0s1#

这是相当粗糙的,但根据上面的例子,它应该足够了:

关于这件事的几件事:

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

velaa5lx2#

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

查找:(?s)^<link rel.+?https://([^"]+).+?https://(*SKIP)(?!\1)
or(.matches new line)
查找:<link rel="canonical"[^>]*"(https[^"]+)"[^>]*>.*?(\1)
感谢那些找到这个答案的人HERE

hwazgwia

hwazgwia3#

查找:

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

(?s)<link\s+rel="canonical"\s+href="([^"]+)"(*SKIP)(*FAIL)|<a\s+href="(?!\1).+?"

相关问题