Например, у меня есть следующая строка:
[noreplace1]<noreplace2>noreplace3[<replace1><replace2>noreplace4<replace3>noreplace5]<noreplace6>noreplace7"
Мне нужно заменить все между <>, которое содержится в квадратных скобках, а не на квадратные скобки.
Я использую preg_replace и пробовал следующее:
preg_replace('/(?<=\[\<)(\<(.*?)*\>)*(?=\])/', '', $str);
Но это не дает желаемых результатов.
Ожидаемый результат должен быть: [noreplace1] noreplace3 [noreplace4noreplace5] noreplace7
Какие-либо предложения?
Попробовать регулярное выражение
<[^>]*>(?=[^\[\]]*\])
Например: http://regex101.com/r/sP8nR9/3
Код может быть
preg_replace('/<[^>]*>(?=[^\[\]]*\])/', '', $str);
Как это соотносится
<[^>]*>
соответствует чему-либо между <>
(?=[^\[\]]*\])
смотрим в будущее утверждение. утверждает, что за регулярным выражением следует
[^\[\]]*
ничего, кроме [
или ]
\]
далее следуют ]
Ожидаемый результат должен быть: [noreplace1] noreplace3 [noreplace4noreplace5] noreplace7
Для этого выхода вы можете использовать strip_tags
, который намного проще
<?php
$content="[noreplace1]<noreplace2>noreplace3[<replace1><replace2>noreplace4<replace3>noreplace5]<noreplace6>noreplace7";
$foo = strip_tags($content);
var_dump($foo);