kostenloser Webspace werbefrei: lima-city


[REGEX] Content zwischen HTML-Tags ermitteln

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    speedtouch92

    Kostenloser Webspace von speedtouch92

    speedtouch92 hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

  4. 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.







  5. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    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
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!