Регулярные выражения

Fred

Новичок
Регулярные выражения

Добрый вечер!

Имеется регулярное выражение

PHP:
preg_match_all('/<multi>(.*)<\/multi>/', $temp, $multi);
Оно нормально обрабатывает:

<multi><tr><td>test</td><td>test</td></tr></multi>

Но не работает в случае:
<multi>
<tr>
<td>test</td>
<td>test</td>
</tr>
</multi>

Как решить данную проблему?

С уважением, Сергей.
 

Dimon

Новичок
Лучше использовать DOM структуру для анализа html
документа

Данная возможность присутствует в PHP5
 

Fred

Новичок
Столкнулся с ещё одной проблемой:

PHP:
preg_match_all('/<multi ([a-z]+)>(.+)<\/multi>/s', $block, $multi);
Если у меня несколько блоков, например:
Код:
<multi test1>
<tr><td>text</td></tr>
</multi>

<multi test2>
<tr><td>text</td></tr>
</multi>
получается, что в переменную $multi передается
Код:
<tr><td>text</td></tr>
</multi>

<multi test2>
<tr><td>text</td></tr>
а не дважды по
Код:
<tr><td>text</td></tr>
В чем ошибка?

С уважением, Сергей.
 

SiMM

Новичок
> В чем ошибка?
Жадность. Читать в разделе "модификаторы шаблонов" [m]pcre.pattern.modifiers[/m]
Ну или в разделе "синтаксис регулярок" [m]reference.pcre.pattern.syntax[/m]
 

Fred

Новичок
Единственный вариант, который я вижу - сделать

PHP:
preg_match_all('/<multi '.$name.')>(.+)<\/multi '.$name.'>/s', $block, $multi)
И соответственно шаблон:

Код:
<multi test1>
<tr><td>text</td></tr>
</multi test1>
 
Сверху