PHP: preg_replace()

Altex

Новичок
PHP: preg_replace()

Есть строка:
PHP:
{abc}Some text{/abc}Some other text{abc}Some text2{/abc}
Нужно с помощью preg_replace() заменить то что между {abc} и {/abc} но
у меня следующая проблема - если делать так :

PHP:
$str = '{abc}Some text{/abc}Some other text{abc}Some text2{/abc}';
$str = preg_replace('/{abc}(.*){/abc}/','',$str);
то вместо 'Some other text' в переменной ничего не будет, так как заданному шаблону поиска будет соответствовать не только '{abc}Some text{/abc}' и '{abc}Some text2{/abc}' но и '{abc}Some text{/abc}Some other text{abc}Some text2{/abc}' целиком, и причем интерпритатор отдаст предпочтение последнему варианту, в моём случае 'к сожалению'. Вопрос очевиден.

P.S. Прошу прощения если эта тема уже обсуждалась - не нашёл.
P.P.S. Заранее спасибо.
 

Flying

Guest
$str = preg_replace('/{abc}(.*){\/abc}/U','',$str);

Модификатор U - ungreedy. Более подробно - в мануале, раздел Pattern Modifiers.
И еще ты слэш забыл отквотить.

Или еще вариант:
$str = preg_replace('/{abc}(.*?){\/abc}/','',$str);

Про '?' тоже посмотри в мануале
 

Altex

Новичок
Спасибо! Я читал про это раньше, но забыл, большое спасибо!
 
Сверху