正则表达式只删除标签内出现的所有字符串

时间:2011-08-03 11:15:44

标签: php regex

我需要删除字符串的所有出现,但只有当它在2个标记内时才会删除。

例如,在下面的内容中,我需要删除[bar] [/ bar]标签中foo的两种情况。

foo
foo
[bar]
foo bar foo
[/bar]
foo

我正在使用PHP,我想找到一个不涉及2个步骤的解决方案(即先搜索[bar] [/ bar]之间的内容,然后再进行替换)。如果这不可能那么没问题,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

如果你的标签形式良好且没有嵌套,那么你可能会成功使用

\bfoo\b(?=[^\[]*\[\/bar\])

here on Regexr

它会搜索被foo包围的\b(foobar中的foo不匹配),后面跟一个结束标记[/bar]。为了确保没有新的开场代码,我只会将[以外的字符与[^\[]*匹配。

(?=[^\[]*\[\/bar\])是一个前瞻性的断言,如果里面的模式跟随,它只会向前看。