REGEX:在 2 个不同的 html 标签中查找那些不包含相同 link 的文件
REGEX: Find those files that doesn't contain the same link in 2 different html tags
我有 1000 多个 html 文件。我需要用 REGEX 找出 <link tag>
中的 link 是否在同一文件的另一个位置重复。
比如第一行有一个<link tag
和这个link https://mywebsite.com/en/truth.html
.
下面一个 <img tag
我还有一个 link 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="(.*?)" \/>.*?)
这可以从
(alt="de" /></a> <a href=").*?("><img src)
并且我使用 ?!
来排除第二个 link,所以正则表达式是:
查找:(.匹配换行符)
(<link rel="canonical" href="(.*?)" \/>.*?)(?!(alt="de" /></a> <a href=")).*?("><img src)
但是没有用,它找到了两个 link,即使它们是一样的。我应该找到上下不包含相同 link 的文件。
这很粗糙,但根据您上面的示例应该足够了:
关于此的一些事情:
- 我正在从
meta
标签中获取 http...
,这假设是绝对 url 而不是 /
例如,如果有多个 urls 在您想要检查的任何 meta
标签中。
- 我只是使用
.*
来查看捕获的 link 是否出现在文本的其他任何地方(甚至在标签之外)——如果您只希望它在标签内,也许将其包装在您要查找的标签中,例如:<a href=""
.
- 确保点匹配换行选项已设置(或使用其他字符 class)。
解决办法:
查找:(?s)<link\h+rel="canonical"\h*\Khref="([^"]+)"((?!<link).)+?<a href="(?!).+?"
或
查找:(?s)^<link rel.+?https://([^"]+).+?https://(*SKIP)(?!)
或(.匹配换行符)
查找:<link rel="canonical"[^>]*"(https[^"]+)"[^>]*>.*?()
感谢找到此答案的人HERE
我有 1000 多个 html 文件。我需要用 REGEX 找出 <link tag>
中的 link 是否在同一文件的另一个位置重复。
比如第一行有一个<link tag
和这个link https://mywebsite.com/en/truth.html
.
下面一个 <img tag
我还有一个 link 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="(.*?)" \/>.*?)
这可以从 (alt="de" /></a> <a href=").*?("><img src)
并且我使用 ?!
来排除第二个 link,所以正则表达式是:
查找:(.匹配换行符)
(<link rel="canonical" href="(.*?)" \/>.*?)(?!(alt="de" /></a> <a href=")).*?("><img src)
但是没有用,它找到了两个 link,即使它们是一样的。我应该找到上下不包含相同 link 的文件。
这很粗糙,但根据您上面的示例应该足够了:
关于此的一些事情:
- 我正在从
meta
标签中获取http...
,这假设是绝对 url 而不是/
例如,如果有多个 urls 在您想要检查的任何meta
标签中。 - 我只是使用
.*
来查看捕获的 link 是否出现在文本的其他任何地方(甚至在标签之外)——如果您只希望它在标签内,也许将其包装在您要查找的标签中,例如:<a href=""
. - 确保点匹配换行选项已设置(或使用其他字符 class)。
解决办法:
查找:(?s)<link\h+rel="canonical"\h*\Khref="([^"]+)"((?!<link).)+?<a href="(?!).+?"
或
查找:(?s)^<link rel.+?https://([^"]+).+?https://(*SKIP)(?!)
或(.匹配换行符)
查找:<link rel="canonical"[^>]*"(https[^"]+)"[^>]*>.*?()
感谢找到此答案的人HERE