[Regulärer Ausdruck] Dynamisch und kompliziert

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Regulärer Ausdruck] Dynamisch und kompliziert

    Hallo zusammen,

    habe mich jetzt zwar ganz gut in Reguläre Ausdrücke eingearbeitet, und auch sehr viele RegExp ganz allein hinbekommen! :-) Aber jetzt stehe ich wieder vor einem Problem, was ich einfach nicht gelöst bekomme.

    Also: ich habe einen HTML-Code, in welchem sowohl Kategorien (DREIstellige Zahlen) und Artikel (FÜNFstellige Zahlen) vorkommen. Die Struktur sieht (chronologisch) so aus, dass immer zuerst eine DREIstellige Zahl kommt und dann unterschiedlich viele FÜNFstellige. Dann kommt wieder eine DREIstellige und unterschiedlich viele FÜNFstellige.

    Die "charakteristischen" Stellen sehen wie folgt aus:
    Code:
    <td class='ltdgrau'>123</td>
    und
    Code:
    <td class='ltdtran'>12345</td>
    .

    Hier ein Beispiel, wie eine Seite (schematisch) aussehen könnte:
    Code:
    ...
    
    <td class='ltdgrau'>110</td>...
    <td class='ltdtran'>12290</td>...
    <td class='ltdtran'>12294</td>......
    
    <td class='ltdgrau'>250</td>...
    <td class='ltdtran'>25144</td>......
    
    <td class='ltdgrau'>380</td>...
    <td class='ltdtran'>38250</td>...
    <td class='ltdtran'>38251</td>...
    <td class='ltdtran'>38252</td>...
    ...
    Ich schaffe es problemlos die DREIstelligen und die FÜNFstelligen Nummern JEWEILS in einer (separaten) Liste chronologisch zu listen, also:
    Code:
    110, 250, 380
    und
    Code:
    12290, 12294, 25144, 38250, 38251, 38252

    Aber nun mein Problem: ich kriege es einfach nicht hin bzw. ich finde einfach keinen Ansatz die GESAMTE Liste automatisiert (also RegExp) chronologisch zu listen, also:
    Code:
    110, 12290, 12294, 250, 25144, 380, 38250, 38251, 38252
    Ich stehe total auf dem Schlauch. Wäre super, wenn mir jemand den goldenen Tipp geben könnte!

    Vielen Dank und Grüße,
    Chris

  • #2
    Bis mir aufgefallen ist, dass deine Tabellenzeilen zwei verschiedene Klassen haben... Und ich wundere mich minutenlang, weswegen nur die dreistelligen Zahlen gematcht werden!

    Und wiese sollte der Ausdruck kompliziert sein?
    Code:
    <td class='(?:ltdgrau|ltdtran)'>(\d+)</td>
    Und beim nächsten Mal deine eigenen Versuchen posten, damit man dich in Richtung Lösung schubsen kann, statt dir die Lösung zu geben.

    Mit (?:ltdgrau|ltdtran) legst du fest, dass entweder ltdgrau oder ltdtran vorhanden sein muss. Die Pipe `|` lässt dich also Alternativen bestimmen. ?: bezweckt schließlich, dass deine Alternation nicht Teil des Ergebnisses wird, denn die Klasse (ltdgrau bzw. ltdtran) soll ja nicht im Ergebnis-Array enthalten sein.
    Zuletzt geändert von Griecherus; 25.03.2008, 23:52.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Wow, ich bin begeistert!! Vielen dank, Griecherus!!

      Kommentar


      • #4
        Ähm, du könntest doch einfach nach den verschiedenen CSS-Klassen suchen und nach dem Schema "von .... bis" die 5 stelligen Zahlen diesen Kategorien zuordnen?

        OffTopic:
        Griecherus - ab ins Bett
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          Original geschrieben von Shurakai
          OffTopic:
          Griecherus - ab ins Bett
          OffTopic:
          Ich überlege schon, ob ich deinem Ratschlag nicht besser Folge leisten sollte
          Nieder mit der Camel Case-Konvention

          Kommentar


          • #6
            Naja, das Problem ist: von diesen besagten CSS-Klassen gibt es ungefähr 100 Stück in jedem Dokument, ist also kein "charakteristisches" Kriterium. Danke dir trotzdem!

            Aber egal: es funktioniert ja! :-)

            Kommentar

            Lädt...
            X