我需要删除字符串的所有出现,但只有当它在2个标记内时才会删除。
例如,在下面的内容中,我需要删除[bar] [/ bar]标签中foo的两种情况。
foo
foo
[bar]
foo bar foo
[/bar]
foo
我正在使用PHP,我想找到一个不涉及2个步骤的解决方案(即先搜索[bar] [/ bar]之间的内容,然后再进行替换)。如果这不可能那么没问题,非常感谢任何帮助!
答案 0 :(得分:1)
如果你的标签形式良好且没有嵌套,那么你可能会成功使用
\bfoo\b(?=[^\[]*\[\/bar\])
它会搜索被foo
包围的\b
(foobar中的foo不匹配),后面跟一个结束标记[/bar]
。为了确保没有新的开场代码,我只会将[
以外的字符与[^\[]*
匹配。
(?=[^\[]*\[\/bar\])
是一个前瞻性的断言,如果里面的模式跟随,它只会向前看。