我有一组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
我对此感到沮丧,可以使用一些帮助。
答案 0 :(得分:0)
要搜索的模式:
<foo>((?:(?!bar|</foo>).)*)</foo>
替换字符串:
<foo>$1 bar</foo>
如果<foo>
标记内部有另一个嵌套的<foo>
标记,则只触及最里面的一对。
请注意,上面的模式使用负面预测(?!pattern)
,它受PCRE(PHP),.NET,Java,JavaScript,Boost库(Notepad ++),Perl支持...