REGEX alles ausser "</table>"
zwelch
- php
1 Gunnar Bittersmann
0 zwelch
1 dedlfix
1 suit
hallo,
ich habe eine tabelle:
<table>
<tr>
<td><a href="file?id=1234">foo</a></td>
</tr>
<tr>
<td><a href="file?id=5678">bar</a></td>
</tr>
[...]
<a href="script.php?teamid=999999"><img src="file.png" /></a>
[... hier kommt noch haufen zeugs ...]
</table>
diese tabelle wiederholt sich mehrfach im suchstring und das ist auch der grund, warum mein regex nicht richtig funktioniert. ich will "foo", "bar" und die "teamid" auslesen. da die tabelle aber wie gesagt mehrfach im suchstring vorkommt trifft es immer nur die letzte "teamid" im gesamten string und nicht in der einzelnen tabelle (wie obiges beispiel). also muesste ich meinen regex an der stelle die ich mit ##### markiert habe einen ausdruck einfügen: hier kann alles kommen ausser "</table>". hab schon einiges probiert aber ich komme auf einen gruenen zweig.
preg_match('/<table[^>]*>.*<a href="[^"]+id=1234[^"]*">([^<]+)<\/a>.*<a href="[^"]+id=5678[^"]*">([^<]+)<\/a>.*<a href="[^"]+teamid=(\d+)[^"]*">[^<]+<\/a>#####<\/table>/si',$html,$pm);
ich hoffe ich habe mich verstädlich ausgedrückt und es kann mir jemand weiter helfen.
zwelch
@@zwelch:
nuqneH
<table>
<tr>
<td><a href="file?id=1234">foo</a></td>
</tr>
<tr>
<td><a href="file?id=5678">bar</a></td>
</tr>
[...]
<a href="script.php?teamid=999999"><img src="file.png" /></a>
[... hier kommt noch haufen zeugs ...]
</table>
Die drei Punkte enthalten '`<tr>`{:.language-html}' und '`<td>`{:.language-html}' bzw. '`<th>`{:.language-html}' sowie die zugehörigen End-Tags? Ansonsten wäre es kein gültiges HTML.
Mit deinem regulären Ausdruck\* hast du noch ein [Problem](https://forum.selfhtml.org/?t=207457&m=1409827). Die Lösung ist die gleiche: verwende keinen, sondern einen Parser. Wenn dein Quelltext (valides!) XHTML ist, kann es auch XSLT sein.
Qapla'
\* bzw. einer kontextsensitiven Erweiterung; mit einem [regulären](http://forum.de.selfhtml.org/archiv/2008/11/t179019/#m1181283) Ausdruck ist „alles ausser "</table>"“ nicht machbar
--
Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
(Mark Twain)
in dem quelltext ist leider nichts valide ... (und ich kann es auch nicht ändern).
zwelch
Hi!
ich habe eine tabelle:
diese tabelle wiederholt sich mehrfach im suchstring und das ist auch der grund, warum mein regex nicht richtig funktioniert. ich will "foo", "bar" und die "teamid" auslesen. da die tabelle aber wie gesagt mehrfach im suchstring vorkommt trifft es immer nur die letzte "teamid" im gesamten string und nicht in der einzelnen tabelle
Suchmuster sind generell gierig (greedy), wenn man nichts dagegen unternimmt. Zusammengehörige Dinge, wie Klammernpaare kann man mit Recursion finden.
Besser ist aber ein Parser. XSLT wurde schon vorgeschlagen, doch das ist zum Umformen gedacht, weniger zum Finden. SimpleXML mit einem XPath-Ausdruck fände ich (bei wohlgeformtem XHTML) zielführender.
Lo!
Besser ist aber ein Parser. XSLT wurde schon vorgeschlagen, doch das ist zum Umformen gedacht, weniger zum Finden. SimpleXML mit einem XPath-Ausdruck fände ich (bei wohlgeformtem XHTML) zielführender.
Und wenn es Drec^WTagSoup ist, kann z.B. Simple HTML DOM herhalten.