我有超过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> <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> <a href=").*?("><img src)
我使用?!
排除第二个链接,所以正则表达式是:
FIND:(.matches new line)(<link rel="canonical" href="(.*?)" \/>.*?)(?!(alt="de" /></a> <a href=")).*?("><img src)
但不起作用,它找到两个链接,即使它们是相同的。我应该找到不包含相同链接的文件向上和向下。
3条答案
按热度按时间7d7tgy0s1#
这是相当粗糙的,但根据上面的例子,它应该足够了:
<meta[^>]*"(http[^"]+)"[^>]*>.*?(\1)
关于这件事的几件事:
meta
标签中抓取了http...
,这假设了一个绝对的url,而不是/
,例如,如果在任何meta
标签中有多个url,你也会想要检查它。.*\1
来查看捕获的链接是否出现在文本中的其他任何地方(甚至在标签之外)--如果你只希望它在标签中,也许可以将它 Package 在你想要找到它的标签中,例如:<a href="\1"
。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
hwazgwia3#
查找:
或