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-Key: 168000

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

Printed on: April 19, 2024 at 18:04 o'clock

Member: vy272909
vy272909 Jun 14, 2011 at 20:16:04 (UTC)
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. =)
Member: nxclass
nxclass Jun 14, 2011 at 20:27:48 (UTC)
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.
Member: EvilMoe
EvilMoe Jun 14, 2011 at 20:29:13 (UTC)
Goto Top
Hey,

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