Регулярное выражение для соответствия всем между <>, которое находится в квадратных скобках

0

Например, у меня есть следующая строка:

[noreplace1]<noreplace2>noreplace3[<replace1><replace2>noreplace4<replace3>noreplace5]<noreplace6>noreplace7"

Мне нужно заменить все между <>, которое содержится в квадратных скобках, а не на квадратные скобки.

Я использую preg_replace и пробовал следующее:

preg_replace('/(?<=\[\<)(\<(.*?)*\>)*(?=\])/', '', $str);

Но это не дает желаемых результатов.

Ожидаемый результат должен быть: [noreplace1] noreplace3 [noreplace4noreplace5] noreplace7

Какие-либо предложения?

Теги:
preg-replace

2 ответа

0
Лучший ответ

Попробовать регулярное выражение

<[^>]*>(?=[^\[\]]*\])

Например: http://regex101.com/r/sP8nR9/3

Код может быть

preg_replace('/<[^>]*>(?=[^\[\]]*\])/', '', $str);

Как это соотносится

  • <[^>]*> соответствует чему-либо между <>

  • (?=[^\[\]]*\]) смотрим в будущее утверждение. утверждает, что за регулярным выражением следует

    • [^\[\]]* ничего, кроме [ или ]

    • \] далее следуют ]

  • 0
    Легенда, это работает!
  • 0
    @AndreJ рад слышать, что это сработало :)
0

Ожидаемый результат должен быть: [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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню