正则表达式:在标签/字段之间搜索和替换单词

正则表达式:在标签/字段之间搜索和替换单词

我需要用 替换所有<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>&nbsp; <a href="/fr/website-2.html"><img src="index_files/flag_lang_fr.jpg" title="fr" alt="fr" width="28" height="19" /></a>&nbsp; <a href="website-3.html"><img src="index_files/flag_lang_en.jpg" title="en" alt="en" width="28" height="19" /></a>&nbsp; <a href="/es/website-4.html"><img src="index_files/flag_lang_es.jpg" title="es" alt="es" width="28" height="19" /></a>&nbsp; <a href="/pt/website-5.html"><img src="index_files/flag_lang_pt.jpg" title="pt" alt="pt" width="28" height="19" /></a>&nbsp; <a href="/ar/website-6.html"><img src="index_files/flag_lang_ae.jpg" width="28" height="19" title="ar" alt="ar" /></a>&nbsp; <a href="/zh/website-7.html"><img src="index_files/flag_lang_zh.jpg" width="28" height="19" title="zh" alt="zh" /></a>&nbsp; <a href="/hi/website-8.html"><img src="index_files/flag_lang_hi.jpg" width="28" height="19" title="hi" alt="hi" /></a>&nbsp; <a href="/de/website-9.html"><img src="index_files/flag_lang_de.jpg" width="28" height="19" title="de" alt="de" /></a>&nbsp; <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 编程才能使用。我不知道还有比这更简单的工具。

相关内容