cmaster
Goto Top

Suchmuster für Funktion preg-replace gesucht

Hallo,

ich bekomme es nicht hin, das Suchmuster für die Funktion preg_replace funktionierend, passend für meinen Zweck zu erstellen; ich hoffe, mir kann da jemand helfen ;)

Ich habe HTML-Quelltext, bspw:
<body>
<div>fghdkghdk</div>
<table class="tbTabelle">  
   <tr>
      <td>test</td>
      <td>
         <table>
            <tr>
               <td>test t2</td>
               <td>test t2</td>
            </tr>
         </table>
      </td>
   </tr>
</table>
<table>
   <tr>
      <td>test t2</td>
      <td>test t2</td>
   </tr>
</table>
<span>jckdlsfj</span>
</body>

nun möchte ich ein Suchmuster, sodass ich die Tabelle mit der Klasse "tbTabelle" hier heraus separieren kann (inkl. der untergeordneten Tabelle, nicht aber die 2. Tabelle). Wie kann ich das genau machen?

Vielen Dank und viele Grüße

Stefan

Content-ID: 168000

Url: https://administrator.de/contentid/168000

Ausgedruckt am: 22.11.2024 um 21:11 Uhr

vy272909
vy272909 14.06.2011 um 22:16:04 Uhr
Goto Top
Ich habe das ganze mal etwas anders gelöst ;)
<?
$content = '<body>  
<div>fghdkghdk</div>
<table class="tbTabelle">  
   <tr>
      <td>test</td>
      <td>
         <table>
            <tr>
               <td>test t2</td>
               <td>test t2</td>
            </tr>
         </table>
      </td>
   </tr>
</table>
<table>
   <tr>
      <td>test t2</td>
      <td>test t2</td>
   </tr>
</table>
<span>jckdlsfj</span>
</body>';  
$content = explode(chr(10), $content);
foreach($content as $id => $value) {
	$pos = strpos($value, '"tbTabelle"');  
	if($pos == true) {
		$begin = strpos($value, '<');  
		$begin_id = $id;
	}
	unset($pos);
	if(isset($begin) && isset($begin_id)) {
		if(substr($value, $begin, 8) == '</table>') {  
			$end_id = $id;
			$id_array = $begin_id.'-'.$end_id;  
			unset($begin, $begin_id, $end_id);
		}
	}
}
foreach($id_array as $id1 => $value1) {
	$value1 = explode('-', $value1);  
	$start = $value1;
	$end = $value1[1];
	foreach($content as $id2 => $value2) {
		if($id2 >= $start && $id2 <= $end) {
			unset($content[$id2]);	
		}
	}
}
$content = implode(chr(10), $content);
echo $content;
?>
Problem hierbei ist bloß, das die Formatierung immer zu 100% richtig sein muss, damit er das Ende finden kann. Ansonsten sollte es funktionieren. =)
nxclass
nxclass 14.06.2011 um 22:27:48 Uhr
Goto Top
Sinnvoller ist es zB. SimpleXML ( http://php.net/manual/en/book.simplexml.php ) mit XPath ( http://www.php.net/manual/en/simplexmlelement.xpath.php ) zu verwenden.
EvilMoe
EvilMoe 14.06.2011 um 22:29:13 Uhr
Goto Top
Hey,

versuch mal folgendes, bin da auch kein Profi
@preg_match("#\<table class\=\"tbTabelle\"\>(.*)\<\/table\>#", $content, $matches);