Регулярка для взятия нескольких блоков

Q_BASIC

Хранитель порядка
Регистрация
30 Ноя 2013
Сообщения
516
Реакции
1.240
Здравствуйте! :)

Есть такое:
PHP:
$text = <<<HTML
<div class="edit">
    [block]BLOCK #1[/block]
</div>
HTML;

preg_match_all("#\[block\](.*)\[\/block\]#su", $text, $out);

print_r($out);

Всё работает хорошо. В $out получаем BLOCK #1.

А если будет так (добавим еще один блок) :
PHP:
$text = <<<HTML
<div class="edit">
    [block]BLOCK #1[/block]
       <div></div>
    <div>[block]BLOCK #2[/block]
    </div>
</div>
HTML;

preg_match_all("#\[block\](.*)\[\/block\]#su", $text, $out);

print_r($out);

То в $out будет это (начинается с первого блока и кончается вторым) :
Код:
BLOCK #1[/block]
       <div></div>
    <div>[block]BLOCK #2

Как сделать чтобы получался массив с отдельными вхождениями?
 
Это называется жадность квантификаторов
Для просмотра ссылки Войди или Зарегистрируйся
Решается изменением шабона поиска путём добавления знака вопроса
#\[block\](.*?)\[\/block\]#su
либо поставить модификатор U

#\[block\](.*?)\[\/block\]#suU
 
Назад
Сверху