2014-11-07 1 views
0

У меня есть следующие строки, например:Регулярное выражение, чтобы соответствовать все между <>, который попадает в квадратные скобки

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

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

Я использую preg_replace и попытался следующие:

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

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

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

Любые предложения?

+1

Какой выход вы ожидаете? – anubhava

+0

Я ожидаю этого: [noreplace1] noreplace3 [noreplace4noreplace5] noreplace7 " –

ответ

0

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

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

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

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

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

Как это соответствует

  • <[^>]*> соответствует всем, что угодно между <>

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

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

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

+0

Легенда, это работает! –

+0

@AndreJ рад слышать, что это сработало :) – nu11p01n73R

0

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

Для этого вывода, вы можете использовать strip_tags, которым гораздо проще

<?php 
$content="[noreplace1]<noreplace2>noreplace3[<replace1><replace2>noreplace4<replace3>noreplace5]<noreplace6>noreplace7"; 
$foo = strip_tags($content); 
var_dump($foo); 
Смежные вопросы