Мне нужно удалить все строки строки, но только в том случае, если она находится в пределах 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\])
– это смотровое утверждение, которое не соответствует ему, только смотрит вперед, если внутри шаблона.