Regex удалить все строки строки только в тегах

Мне нужно удалить все строки строки, но только в том случае, если она находится в пределах 2 тегов.

Например, в приведенном ниже содержимом мне нужно удалить оба события foo в тегах [bar] [/ bar].

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

Я использую PHP, и я хотел бы найти решение, которое не включает 2 шага (т.е. сначала поиск содержимого между [bar] [/ bar], а затем замена). Если это невозможно, не проблема, любая помощь очень ценится!

Если ваши теги хорошо сформированы и не вложены, вы можете добиться успеха в этом

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

См. Здесь, в Regexr

Он ищет foo окруженный границами слов \b (foo in foobar не будет соответствовать), за которым следует закрывающий тег [/bar] . чтобы убедиться, что нет нового тега открытия, я буду соответствовать только символам, отличным от [ с помощью [^\[]* .

(?=[^\[]*\[\/bar\]) – это смотровое утверждение, которое не соответствует ему, только смотрит вперед, если внутри шаблона.