regex - 正则表达式:在 2 个不同的 html 标记中查找那些不包含相同链接的文件
问题描述
我有 1000 多个 html 文件。我需要用 REGEX 找出一个链接<link tag>
是否在同一文件的另一个位置重复。
例如,在第一行有一个<link tag
with 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> <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)
我?!
用来排除第二个链接,所以正则表达式是:
查找:(.匹配换行符)
(<link rel="canonical" href="(.*?)" \/>.*?)(?!(alt="de" /></a> <a href=")).*?("><img src)
但是不起作用,它会找到两个链接,即使它们是相同的。我应该找到不包含上下相同链接的文件。
解决方案
这很粗略,但根据您上面的示例,它应该足够了:
关于这一点的几点:
- 我
http...
从meta
标签中获取,这假定一个绝对 url,而不是/
例如,如果任何meta
标签中有多个 url,你也想检查它。 - 我只是使用 a
.*\1
来查看捕获的链接是否出现在文本中的其他任何地方(甚至在标签之外)——如果你只希望它在一个标签内,也许将它包装在你想要找到它的标签中,例如:<a href="\1"
。 - 确保设置了 dot-matches-newline 选项(或使用另一个字符类)。
推荐阅读
- java - Java dynamically generate SQL query - ATHENA
- pandas - Pandas max along n rows
- sql - DB2 将时间戳值和空值都插入到可为空的时间戳列中
- python-2.7 - Uninstall and re-install of Anaconda 2.7 won't fix kernel problem in Jupyter
- powerbi - Power bi group ranking
- json - How to pass Json array to Jenkins shell script
- c# - 无法使用锚标记帮助程序使剃刀页面路由工作
- html - 具有旋转动态列的 Kendo Grid
- go - 如何在同一包中的多个源之间共享聚合类型(例如自定义结构)
- python - How to convert pixels stored in a list into an image with python?