Как работает preg_match_all ?

D
На сайте с 20.09.2010
Offline
175
285

Помогите регить задачу, есть код:

$text='

<div class="content">
<div class="first">111</div>
<div class="second">
<p>222</p>
<div class="third">333</div>
</div>
<p>bla</p>
</div>
<p>text after</p>';
$pattern = "|<div class=\"content\">(.*?)</div>|is";
preg_match_all($pattern, $text, $out);

В результате я в массив получаю такой код: <div class="first">111

Тоесть интерпретатор считает до первого закрывающего дива.

А есть вариант чтобы я мог вырезать контент, чтобы в массиве у меня было:

<div class="first">111</div>

<div class="second">

<p>222</p>

<div class="third">333</div>

</div>

<p>bla</p>

тоесть все что в средине тега div class="content" ?

IL
На сайте с 20.04.2007
Offline
435
#1

$pattern = "#<div class=\"content\">(.*?)</div>#miUs"; 
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
J
На сайте с 20.02.2014
Offline
120
jkm
#2

$text='

<div class="content">
<div class="first">111</div>
<div class="second">
<p>222</p>
<div class="third">333</div>
</div>
<p>bla</p>
</div>
<p>text after</p>';
$pattern = '~<div class="content">((?:[^<]|(?!</?div).|<div(?1)</div>)*+)~si';
preg_match_all($pattern, $text, $out);
D
На сайте с 20.09.2010
Offline
175
#3
ivan-lev:
$pattern = "#<div class=\"content\">(.*?)</div>#miUs"; 

А как работает директива #miUs ?

Что-то вроде получше результаты, но все-равно не то..

В результирующий набор попало куча контента, который выходит за рамки <div class=\"content\">.....</div>(Закрывающего class=content)

ME
На сайте с 03.07.2017
Offline
66
#4

Никогда. Слышите? Никогда не разбирайте html регулярками. Они для этого не предназначены. Используйте библиотеки для работы с dom деревом.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий