正则表达式:如果不存在,则在xml标记内添加文本

时间:2014-01-22 18:42:18

标签: regex

我有一组xml标签:

<foo></foo>

如果标签里面有“bar”字样我什么都不做

<foo>dog bar cat</foo> -> <foo>dog bar cat</foo>

如果标签中没有“bar”字样,我将其添加到文本的末尾

<foo>dog cat</foo> -> <foo>dog cat bar</foo>\

“bar”可能位于标签之间的任何位置。如何使用正则表达式进行这种替换?

我尝试了以下各种变体,但它无效:

(<foo>.*?)((?:bar)*)(.*?</foo>) replace with $1 bar$3

我对此感到沮丧,可以使用一些帮助。

1 个答案:

答案 0 :(得分:0)

要搜索的模式:

<foo>((?:(?!bar|</foo>).)*)</foo>

替换字符串:

<foo>$1 bar</foo>

如果<foo>标记内部有另一个嵌套的<foo>标记,则只触及最里面的一对。

请注意,上面的模式使用负面预测(?!pattern),它受PCRE(PHP),.NET,Java,JavaScript,Boost库(Notepad ++),Perl支持...