如何解决正则表达式:在 2 个不同的 html 标签中查找那些不包含相同链接的文件
我有 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 rel="canonical" href="(.*?)" \/>.*?) 这可以从 (alt="de" /></a> <a href=").*?("><img src)
我使用 ?!
来排除第二个链接,所以正则表达式是:
查找:(.匹配换行符)
(<link rel="canonical" href="(.*?)" \/>.*?)(?!(alt="de" /></a> <a href=")).*?("><img src)
但是不起作用,它会找到两个链接,即使它们是相同的。我应该找到上下不包含相同链接的文件。
解决方法
这很粗糙,但根据您上面的示例应该足够了:
关于此的一些事情:
- 我正在从
http...
标签中获取meta
,这假设是绝对网址而不是/
,例如,如果任何meta
中有多个网址标签,你也想检查一下。 - 我只是使用
.*\1
来查看捕获的链接是否出现在文本中的其他任何位置(甚至在标签之外)——如果您只想要它在标签内,也许将它包装在您的标签中正在寻找它,例如:<a href="\1"
。 - 确保设置了 dot-matches-newline 选项(或使用其他字符类)。
解决方案:
查找:(?s)<link\h+rel="canonical"\h*\Khref="([^"]+)"((?!<link).)+?<a href="(?!\1).+?"
或
查找:(?s)^<link rel.+?https://([^"]+).+?https://(*SKIP)(?!\1)
或(.匹配换行符)
查找:<link rel="canonical"[^>]*"(https[^"]+)"[^>]*>.*?(\1)
感谢找到这个答案的人HERE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。