正则表达式:在 2 个不同的 html 标签中查找那些不包含相同链接的文件

如何解决正则表达式:在 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>&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 rel="canonical" href="(.*?)" \/>.*?) 这可以从 (alt="de" /></a>&nbsp; <a href=").*?("><img src)

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

查找:(.匹配换行符)

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

但是不起作用,它会找到两个链接,即使它们是相同的。我应该找到上下不包含相同链接文件

解决方法

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

enter image description here

关于此的一些事情:

  • 我正在从 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?