siedze nad tym już kilka godzin

i nie moge dopasować wyrażenia, ale schemat mam taki:
Kod
$s = '<table><tr><td width="200">Rameczka</td></tr></table>';
function doIt($str) {
print_r($str);
// static $level;
// if (!isset($level)) $level = 0;
// if ( $str[1] != $str[4] ) return $str[1];
// $offset = '';
// for ( $i=0; $i<=$level; $i++)
// $offset .= ' ';
return "\n <".$str[1]." ".$str[2].">\n ".$str[3]."\n </".$str[4].">";
}
echo preg_replace_callback('#<(.*?)\s(.*?)>(.*?)</(.*?)>#si', 'doIt', $s);
próbowałem złapać <(tag)(opcjonalnie spacja i atrybuty)>(zawartosc)</(tag)> i jeżeli pierwszy tag == ostatni tag to wtedy następuje zagnieżdżenie
update:inaczej to ugryzłem
<?php
$s = '<table><tr><td width="200">Ot,<br />Rameczka</td></tr></table>';
function doIt($str) {
if (!isset($level)) $level = -1;
if ($str[1
]{strlen($str[1])-1} != '/') { // jeżeli aktualny tag nie jest pojedyńczym tagiem (np. <br />)
// jeżeli poprzedni tag jest różny od aktualnego
if ( $str[1]{0}=="/" ) {
// jeżeli aktualny tag jest zamykający
$level--;
} else {
$level++;
}
}
// zapamiętuję aktualny tag
$lastTag = $str[1];
}
// odpowiednia ilośc spacji
$offset = '';
for ( $i=0; $i<$level; $i++)
$offset .= ' ';
return "n".$offset.$str[0]."n".$offset." ";
}
?>
(BTW: może mi ktoś wytłumaczyć dlaczego kolorowanie składni forum dodaje \ przed " oraz usuwa \ przed n?)i to wyrzuci
Kod
<table>
<tr>
<td width="200">
Ot,
<br />
Rameczka
</td>
</tr>
</table>
uwaga! produkt nieprzetestowany we wszystkich wypadkach.