在一次传递中查找并替换HTML标记内所有出现的字符串

时间:2016-08-05 07:29:53

标签: html regex replace notepad++

我需要一个正则表达式来搜索和替换文本分隔部分中多次出现的文本字符串。

我们假设有一个HTML代码,其中包含一个或多个具有特定类的跨度。每个跨度内部可能没有,一次或多次出现字符串{abc},例如

<p>lorem ipsum dolor <span class="xyz">sid amet{abc}et pluribus {abc} unum{abc} diex 
et mon droit</span> you'll never walk alone</p>

因此,我需要一个正则表达式对,用{abc} 替换<span id="xyz">{def}的所有(<span class="xyz">)([^<]*)\{abc\}([^<]*<)

这适用于文本编辑器,例如 Notepad ++等,需要是 PCRE / UNIX风格的正则表达式。

我拥有的是,

查找:\1\2{def}\3

替换:webapps

这个在一个范围内一次出现,但是如果出现更多,我必须在周期中多次运行替换,而我需要一次通过

我想知道如何实现这一目标。我想这是一个非常常见的情况,不知怎的,我找不到类似的事情,需要一次通过,没有周期,没有代码,我想知道如何在原则上做到这一点。

1 个答案:

答案 0 :(得分:1)

这似乎适用于Notepad ++

找到:(?:<span class="xyz">|\G)[^<]*?\K\{abc\}(?=[^<]*<\/span>)

替换为:{def}

搜索模式:正则表达式

请注意,由于[^<]*,我们假设span标记中没有其他标记。