Mafia
Помогите разобраться с регулярными выражениями на PHP. Есть html код:
Код:
<table>
<tr class=1><td class=2>раздел 1</td></tr>
<tr><td>текст 1 <a href>текст ссылки</a></td></tr>
<tr><td>текст 2 </td></tr>
<tr class=1><td class=2>раздел 2</td></tr>
<tr><td>текст 1 </td></tr>
<tr><td>текст 2 </td></tr>
</table>
Задача - вырезать блоки:
Код:
<tr class=1><td class=2>раздел 1</td></tr>
<tr><td>текст 1 <a href>текст ссылки</a></td></tr>
<tr><td>текст 2 </td></tr>
Код:
<tr class=1><td class=2>раздел 2</td></tr>
<tr><td>текст 1 </td></tr>
<tr><td>текст 2 </td></tr>
Помоги составить правильно выражение.
remorhaz
Блоки по три ряда вырезать надо? Вот выражение:
Код:
#(?:<tr(?:\s+[^>]*)?>.*?</tr>){3}#is
Не забудь модификатор s, иначе всякие там переносы строк за точку считать не будет.
freeek
пример, сильно абстрактный, зацепиться не за что
в общем виде для данного случая:
Код:
$html = '<table>
<tr class=1><td class=2>раздел 1</td></tr>
<tr><td>текст 1 <a href>текст ссылки</a></td></tr>
<tr><td>текст 2 </td></tr>
<tr class=1><td class=2>раздел 2</td></tr>
<tr><td>текст 1 </td></tr>
<tr><td>текст 2 </td></tr>
</table>';
preg_match( '%((?:<tr.*(?=tr>)tr>[^<]*){3})[^<]*((?:<tr.*(?=tr>)tr>[^<]*){3})%isU', $html, $match );
echo '<pre>';
/**
* в $match[1] и $match[2],
* соответсвенно искомые части
**/
print_r( $match );
echo '</pre>';