2013-04-18 3 views
0

Скажем, у меня естьPHP регулярное выражение удалить теги между [] marquers

$content = "some text [again < dummy1>< /dummy1> some te < dummy2>< /dummy2>< /dummy3>xt] keep theses < needkeeped>xxx< needkeeped>" 

Я хочу, чтобы удалить все теги < dummyx>, но я хочу сделать это только для тегов ведьмы находятся между [ и ] символы

Ожидаемое результат будет

$content = "some text [again some text] keep theses `< needkeeped>xxx< needkeeped>"` 

Я попытался

preg_replace('/<[^>]*>/', '', $content) 

Но удалены все теги

+0

Будут ли вставляться в квадратные скобки секции когда-либо вложенными? например '[... [...] ...]'? – ridgerunner

+0

нет: [] не может быть между [] например [... [...] ...] – user2296435

ответ

3
preg_replace_callback('/\[[^\]]+\]/', function($matches){ 
    return preg_replace('/<[^>]*>/', '', $matches[0]); 
}, $content); 

Сначала найдите все квадратные скобки, а затем замените теги внутри них.

http://ideone.com/wmyfXS

+1

Или 'strip_tags()' может использоваться в обратном вызове – pozs

+0

Ха-ха, да, возможно. – FrankieTheKneeMan

+0

Да! Работа также – user2296435

4

Вы можете использовать

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

Это далеко от несложный, но это может быть достаточно хорошим.

Он заменит теги только тогда, когда есть ] перед [ впереди в строке.

Конечно, это требует, чтобы есть не <, >, [ или ] в строке с другом использования.

+0

Я думаю, что это правильно: '/ <[^>] *> (? = [^ \ [\]] * \])/' –

+0

Удивительно! Спасибо – user2296435

+0

Редактор кода здесь не показывает, что я вставил. –

Смежные вопросы