我需要用 替换所有<a href="/
内容<a href="https://link.com/
,但仅限于COMMENTS
标签/字段之间。
我可以用正则表达式来做到这一点吗?
<!-- COMMENTS -->
<div class="searchField">
<div align="right">
<a href="/website-1.html"><img src="index_files/flag_lang_ro.jpg" title="ro" alt="ro" width="28" height="19" /></a> <a href="/fr/website-2.html"><img src="index_files/flag_lang_fr.jpg" title="fr" alt="fr" width="28" height="19" /></a> <a href="website-3.html"><img src="index_files/flag_lang_en.jpg" title="en" alt="en" width="28" height="19" /></a> <a href="/es/website-4.html"><img src="index_files/flag_lang_es.jpg" title="es" alt="es" width="28" height="19" /></a> <a href="/pt/website-5.html"><img src="index_files/flag_lang_pt.jpg" title="pt" alt="pt" width="28" height="19" /></a> <a href="/ar/website-6.html"><img src="index_files/flag_lang_ae.jpg" width="28" height="19" title="ar" alt="ar" /></a> <a href="/zh/website-7.html"><img src="index_files/flag_lang_zh.jpg" width="28" height="19" title="zh" alt="zh" /></a> <a href="/hi/website-8.html"><img src="index_files/flag_lang_hi.jpg" width="28" height="19" title="hi" alt="hi" /></a> <a href="/de/website-9.html"><img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a> <a href="/ru/website-10.html"><img src="index_files/flag_lang_ru.jpg" width="28" height="19" title="ru" alt="ru" /></a></div>
<!-- COMMENTS -->
答案1
搜索:
(?s)(<\!-- COMMENTS -->|\G)((?!^<).)+?<a href="\K(?=/)
替换为:
https://link.com
答案2
这对于正则表达式来说是一项不可能完成的任务。原因是<a href="/
COMMENTS 文本之间的出现次数未知。
即使多次应用正则表达式来替换一次出现的<a href="/
也不起作用,因为它也会href
在文本中找到 ,例如:
<!-- COMMENTS -->
...
<!-- COMMENTS -->
...<a href="/...
<!-- COMMENTS -->
...
<!-- COMMENTS -->
您需要用某种编程语言编写的脚本来执行这种替换(可能使用正则表达式进行搜索),而不是仅使用一个正则表达式替换完成整个操作。
答案3
回答你的问题:不,你不能。
原因在其他地方有详细说明,但其要点是 Html 给予正则表达式太多的自由来处理。
- Html 代码可以有无限数量的空格、制表符,尤其是新行,这使得编写好的正则表达式变得困难。
- 除此之外,还有几种可以嵌套的“分组”类型:
<
和之间的标签>
<tag>
和之间的内容</tag>
(和<tag>
s 没有结束</tag>
s)- 标签中引用的属性值,例如
<a href="yourlink" title="<a href to confuse you>">
<!-- ... -->
可以包含以上所有内容的注释(以及未关闭的注释,它们在>
包含第一个注释之后隐式关闭,例如<tag>
)
- 由于 Html 代码从未被编译且很少被验证,因此完全缺乏任何语法强制,这对您的正则表达式解析器来说是致命的打击。
为了增加我的答案的价值:你需要一个真正的 Html 解析器。对于这样的任务,我仍然使用旧的准系统“轻量级 HTML 扫描器”,一个小型 Java 库,许多用途(包括私有用途)都是免费的,但需要一些 Java 编程才能使用。我不知道还有比这更简单的工具。