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

  #6  
Старый 12.02.2009, 00:56
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме:
4832771

Репутация: 1916


По умолчанию

Можно и одним проходом, главное составить нужную регулярку. Если бы у тебя тег li был закрыт, то регулярка выглядела бы так:

PHP код:
<?php

$str 
= <<<STR

<div>
<h1>STR_1a</h1>
  <h2>STR_2a</h2>
   <ol>
     <li> STR_3a</li>
     <li> STR_4a</li>
     <li> STR_5a</li>
   </ol>
</div>

<div>
<h1>STR_1b</h1>
  <h2>STR_2b</h2>
   <ol>
     <li> STR_3b</li>
     <li> STR_4b</li>
     <li> STR_5b </li>
     <li> STR_6b</li>
     <li> STR_7b</li>
   </ol>
</div>

STR;


preg_match_all('#<(h[12]{1}|li)>([^>]*)</\\1>#s'$str$out);
print_r($out[2]);

?>

Или если всё таки они не закрыты, то парсим вот так:

PHP код:
<?php

$str 
= <<<STR

<div>
<h1>STR_1a</h1>
  <h2>STR_2a</h2>
   <ol>
     <li> STR_3a
     <li> STR_4a
     <li> STR_5a
   </ol>
</div>

<div>
<h1>STR_1b</h1>
  <h2>STR_2b</h2>
   <ol>
     <li> STR_3b
     <li> STR_4b
     <li> STR_5b
     <li> STR_6b
     <li> STR_7b
   </ol>
</div>

STR;


preg_match_all("#<(h[12]{1}|li)>([^>]*)(</h[12]{1}>|\r\n)#s"$str$out);
print_r($out[2]);

?>

Хитрый финт ушами))