138701
Aug 06, 2020
1811
3
0
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?
Please also mark the comments that contributed to the solution of the article
Content-Key: 594207
Url: https://administrator.de/contentid/594207
Printed on: April 18, 2024 at 03:04 o'clock
3 Comments
Latest comment
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);
?>