Показать сообщение отдельно

  #3  
Старый 09.06.2008, 15:47
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме:
804931

Репутация: 526
По умолчанию

Цитата:
Сообщение от .:EnoT:.  
Есть предположим такая страница:
PHP код:
<div class="abc">
Какой-то блок текста 1
</div>
<
div class="abc">
Какой-то блок текста 2
</div>
<
div class="abc">
Какой-то блок текста 3
</div>
<
div class="abc">
Какой-то блок текста 4
</div
Регуляркой парсю всё это безобразие:
Да, я наконец-то нашёл время почитать про регулярки
PHP код:
preg_match("/<div class=\"abc\">(.+)<\/div>/is",$str,$a);
print_r($a); 
Получаю:
PHP код:
Array (
[
0] =>
Какой-то блок текста 1
Какой
-то блок текста 2
Какой
-то блок текста 3
Какой
-то блок текста 4
[1] =>
 
Какой-то блок текста 1
Какой
-то блок текста 2
Какой
-то блок текста 3
Какой
-то блок текста 4 
Подставлял U, но находит только первое вхождение)

А теперь вопрос:
Как сделать регулярку (или другими способами), чтобы каждый "Какой-то блок текста" был в отдельном массиве, т.е:
PHP код:
Array ( 
[
0] =>Какой-то блок текста 1,
[
1] =>Какой-то блок текста 2,
[
2] =>Какой-то блок текста 3,
[
3] =>Какой-то блок текста 4
...etc...) 
Пробовал с preg_match_all(), тоже не помогло.
Сильно в твою проблему не вникал, но понял следующее: он у тебя все загоняет в один элемент, т.к. по умолчанию регулярки "жадные", т.е. под твою регулярку попадает все, от первогодива класса abc до последнего закрывающего тег див. Поэтому тебе необходимо использовать так называемый модификатор "жадности" (U).

Т.е. нечто вроде:

PHP код:
preg_match_all("/<div class=\"abc\">(.+)<\/div>/isU",$str,$a); 
В первом элементе массива $a будет нужный тебе массив
 
Ответить с цитированием