
138701
06.08.2020
Regex Problem
Hallo zusammen
Ich möchte alle TR-Elemente aus einer Datei einzeln in einen Array packen
So sieht die Datei aus:
Mein Code:
Das Regex packt alle Elemente in ein einziges Element des Arrays - Was ist falsch?
Ich möchte alle TR-Elemente aus einer Datei einzeln in einen Array packen
So sieht die Datei aus:
<tr>
<td>...</td>
</tr>
<tr>
<td>...</td>
</tr>
...
Mein Code:
preg_match_all('#<tr>([\s\S](?!.*<tr>))+<\/tr>#', $context, $match2);
Das Regex packt alle Elemente in ein einziges Element des Arrays - Was ist falsch?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 594207
Url: https://administrator.de/forum/regex-problem-594207.html
Ausgedruckt am: 22.04.2025 um 01:04 Uhr
3 Kommentare
Neuester Kommentar
Welche PHP-Version nutzt du - und vor allem, unter welchem OS? Bei mir funktioniert das unter Linux tadellos:
Ausgabe:
$input = <<<EOF
<tr>
<td>Gr1</td>
</tr>
<tr>
<td>Gr2</td>
</tr>
EOF;
echo "\n\n";
preg_match_all('#<tr>([\s\S](?!.*<tr>))+<\/tr>#', $input, $match2);
var_dump($match2);
echo "\n\n";
Ausgabe:
array(2) {
=>
array(2) {
=>
string(27) "<tr>
<td>Gr1</td>
</tr>"
[1]=>
string(27) "<tr>
<td>Gr2</td>
</tr>"
}
[1]=>
array(2) {
=>
string(1) "
"
[1]=>
string(1) "
"
}
}

Regex kann man bei HTML machen ist aber meist sauberer man nimmt bei solchen Dokumenten gleich einen richtigen Parser wie die DOMDocument Klasse:
Bsp.
Bsp.
<?php
// string definieren
$str = '
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Testdokument</title>
</head>
<body>
<table width="500" border="1" cellspacing="0" cellpadding="2">
<tr>
<td>Test1</td>
<td>Test2</td>
<td>Test3</td>
</tr>
<tr>
<td>Test4</td>
<td>Test5</td>
<td>Test6</td>
</tr>
<tr>
<td>Test7</td>
<td>Test8</td>
<td>Test9</td>
</tr>
</table>
</body>
</html>
';
// DOM Document erstellen
$doc = new DOMDocument();
// HTML laden
$doc->loadHTML($str);
// tr elements extrahieren
$tr_elements = $doc->getElementsByTagName('tr');
var_dump($tr_elements);
?>