[REGEX] Content zwischen HTML-Tags ermitteln
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
antwort
ausdruck
bearbeiten
beispiel
code
doofe idee
entsprechen
ergebnis
fragestellung
helfen
http
inhalt
jemand
match
problem
programmiersprache
sprache
tabelle
url
voraussetzung
-
Hallo,
um eine Tabelle zu parsen, bin ich auf der Suche nach einem Regex für eine einzelne Tabellenzeile.
Ich habe
<tr\b[^>]*>(.*?)<\/tr>
versucht, aber ohne erfolgt.
lustigerweise matched der nur auf einige Tabellenzeilen und nicht auf alle :(
Ich möchte gerne auf alle Tabellenzeilen matchen, die so aufgebaut sind:
<tr class='col{NUMMER}'>{content}</tr>
und als ergebnis jeweils den Inhalt des TR-Tags haben.
Kann mir da jemand helfen?
Liebe Grüße schonmal im Vorraus -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Es ist eine doofe Idee eine nicht reguläre Sprache (wie HTML) mit einem regulären Ausdruck zu bearbeiten. Siehe hier: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags (die erste Antwort)
-
kochmarkus schrieb:
Es ist eine doofe Idee eine nicht reguläre Sprache (wie HTML) mit einem regulären Ausdruck zu bearbeiten. Siehe hier: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags (die erste Antwort)
... und es ist immer wieder dasselbe: Man versteht die Fragestellung zwar nicht, glaubt aber zu wissen, dass das Problem mit "Regulären Ausdrücken" nicht lösbar wäre und verlinkt darob unsäglichen überheblichen Quatsch (der Stackoverflow-Thread enthält durchaus auch vernünftige Antworten). Der OP möchte aus einer Zeichenkette Teile ausschneiden, die einem bestimmten Muster entsprechen. Selbstverständlich ist das mit der Hilfe Regulärer Ausdrücke möglich. Dass er diesen Vorgang fälschlicherweise "Parsen" genannt hat, sei ihm verziehen.
Ich möchte gerne auf alle Tabellenzeilen matchen, die so aufgebaut sind:
<tr class='col{NUMMER}'>{content}</tr>
und als ergebnis jeweils den Inhalt des TR-Tags haben.
Kann mir da jemand helfen?
In PCRE unter der Voraussetzung, das die Tabellen nicht verschachtelt sind:
/<tr\s+class=\x27col[^\x27]+?\x27>(.*?)<\/tr>/i
Das Ergebnis ("content") steht dann in $1 oder im PHP-Trefferarray auf Index 1.
[^\x27]+? deshalb, weil du nicht angegeben hast, welcherart deine {NUMMER} ist.
Und wieso hat eine Tabellenzeile ("row") die Bezeichung "col" (== "column")?
... lustigerweise matched der nur auf einige Tabellenzeilen und nicht auf alle :(
Das ist keine Fehlerbeschreibung.
Untersuche die Tabellenzeilen auf ihre Unterschiede, dann kommst du dahinter, warum der Ausdruck mal fündig wird und mal nicht.
-
alopex schrieb:
In PCRE unter der Voraussetzung, das die Tabellen nicht verschachtelt sind:
Ja, verschachtelte Tabellen sind ein Beispiel bei der deine RegEx scheitert, ein anderes Beispiel wäre:
<tr class='col{NUMMER}'>{con<!--</tr>-->tent}</tr> oder <tr class='col{NUMMER}'>{con<![CDATA[</tr>]]>tent}</tr>
oder wenn sich der <tr> Tag leicht ändert:
<tr class="col{NUMMER}">{content}</tr> oder <tr class='col{NUMMER}' id='foobar'>{conent}</tr>
Also warum mit einem regulären Ausdruck rumbasteln, wenn man diese Probleme mit einem XML Parser (der genau wie RegExes) eigentlich in die meisten Programmiersprachen eingebaut ist umgehen kann?
Es ist zwar mehr Code zu schreiben, aber dafür weniger Fehleranfällig und einfacher wartbar.
€dit: Weil es so schön ist, noch ein Beispiel bei der deine RegEx failed:
<tr class='col{NUMMER}'>{con<a title="</tr>foo">bar</a>tent}</tr>
Beitrag zuletzt geändert: 29.9.2011 23:59:52 von kochmarkus -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage