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

Q_BASIC

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

Есть такое:
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

Как сделать чтобы получался массив с отдельными вхождениями?
 

KillDead

Хранитель порядка
Регистрация
11 Авг 2006
Сообщения
894
Реакции
579
Это называется жадность квантификаторов
Для просмотра ссылки Войди или Зарегистрируйся
Решается изменением шабона поиска путём добавления знака вопроса
#\[block\](.*?)\[\/block\]#su
либо поставить модификатор U

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