regex ausdruck

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

  • regex ausdruck

    hallo habe ein problem mit einem regex ausdruck, der als pattern in einer preg_match abfrage verwendet werden soll. ich dabei nach folgendem suchen: alles, was innerhalb
    PHP-Code:
    <table class="blabla"
    und
    PHP-Code:
    </table
    steht soll dabei gefiltert werden. mehrfachübereinstimmungen sind ja kein problem. ich habe wirklich keine ahnung, wie ich das hinbekomme. kann mir jemand helfen?? danke

  • #2
    Hallo,

    mit regulären Ausdrücken geht das nur, wenn innerhalb der Tabelle keine verschachtelte Tabelle mehr enthalten ist. Besser wäre es, das per DOM zu machen, wenn du mich fragst.

    PHP-Code:
    "!<table\\s+class=\"blabla\"\\s*>(.+?)</table\\s*>!s" 
    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      nein, keine verschachtelten tabellen mehr, nur ganz normale trs und tds.
      danke für die regex, ich schau mir das jetzt mal ganz genau an

      du würdest das mit dom machen? wie genau meinst du das?

      super, danke für die schnelle hilfe!!


      //EDIT:
      hab das gerade mal getestet, bekomme aber leider kein ergebnis
      (tut mir leid, kann sein, dass ich einen dummen fehler mache)

      PHP-Code:
         $muster "!<table\\s+class=\"test\"\\s*>(.+?)</table\\s*>!s";
         
      preg_match($muster$string$treffer);

      //$string enthält validen html code
      //die zeichenkette <table class="test">....</table> ist 100% enthalten
      //leider ist $treffer leer 
      Zuletzt geändert von svr; 31.03.2010, 13:16.

      Kommentar


      • #4
        Poste mal bitte den Inhalt von $string auszugsweise, so dass man es nachvollziehen kann.

        http://php.net/manual/de/book.dom.php
        Zuletzt geändert von AmicaNoctis; 31.03.2010, 13:24.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          wollte das nicht posten, da es eben sehr lange ist, aber entschuldige, du hast recht. ohne kann man das schlecht nachvollziehen.

          nopaste.info - free nopaste script and service
          (die class um die es geht ist in großbuchstaben geschrieben!)

          hier kann man es sich ansehen. hab das ganze überarbeitet, da zwischen den einzelnen elementen unendlich viel stand, weshalb es sehr unübersichtlich wäre

          ist leider trotzdem nicht sehr viel besser, entschuldige das

          danke!
          Zuletzt geändert von svr; 31.03.2010, 13:33.

          Kommentar


          • #6
            TEST ist dort groß geschrieben. Häng mal einfach ein "i" ganz hinten an den Ausdruck dran: "...!si"
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              habe test nur der erkennbarkeit wegen gross geschrieben

              in wirklichkeit steht dort absatzKlein genau in dieser schreibung. und genau so habe ich es auch in das muster eingefügt.

              durch den i modifikator wird ja nur die unterscheidung zwischen groß und kleinschreibung deaktiviert.

              Kommentar


              • #8
                Steht es dort auch in "..." oder zufällig in '...'? Ich sehe nämlich bisher keinen Grund, warum das nicht funktionieren sollte. Bitte sorge für 100%ige Nachvollziehbarkeit, indem du den echten HTML-Code (auszugsweise) und das aktuelle Suchmuster zur Verfügung stellst. Dieser Testcode von mir funktioniert jedenfalls tadellos:

                PHP-Code:
                <?php
                    $string 
                = <<<'EOD'
                <div>
                    <div>
                        ...
                        <div class="clear"></div>
                    </div>
                </div>
                <div class="mainCont">
                    <h2 class="first "> basis </h2>
                    <table class="absatzKlein">
                        <tr><td class="defType">last</td><td> <p>nummer</p> </td></tr>
                        <tr><td class="defType">since</td><td> nummer </td></tr>
                        <tr><td class="defType">ich</td> <td><p>mann</p></td> </tr>
                        <tr>
                            <td class="defType">blaa</td>
                            <td> <p><a href="url">zahl</a>/<a href="url">bla</a> </td>
                        </tr>
                        <tr> <td class="defType">ich</td> <td> <p> bla </p> </td> </tr>
                        <tr> <td class="defType">ich</td> <td> <p> - </p> </td> </tr>
                        <tr> <td class="defType">bla:</td> <td><p>bla</p></td> </tr>
                        <tr> <td class="defType">ich</td> <td><p>bla</p></td> </tr>
                    </table>
                    <div id="rectangle" style="display:none;">
                        <div class="rectangle" id="BANNER_rectangle"></div>
                    </div>
                    <div class="clear"></div>
                    <h2 class="mainHeader "> header</h2>
                    <table class="absatzKlein">
                        <tr>...</tr>
                    </table>
                </div>
                EOD;
                    
                $muster "!<table\\s+class=\"absatzKlein\"\\s*>(.+?)</table\\s*>!si";
                    
                preg_match($muster$string$treffer);
                    
                // preg_match_all($muster, $string, $treffer);
                    
                print_r($treffer);
                ?>
                Edit: wenn du als Muster
                PHP-Code:
                "!<table\\s+class=([\"'])absatzKlein\\1\\s*>(.+?)</table\\s*>!s" 
                verwendest, ist es sogar egal, welches Anführungszeichen verwendet wird.
                Zuletzt geändert von AmicaNoctis; 31.03.2010, 13:56.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  ich bauarbeiter. damit, die daten als html für mich sichtbar sind, habe ich string mit htmlentities behandelt. daran hat es wohl gelegen, jetzt geht alles.

                  entschuldige mich!

                  nochmals danke für die kompetente hilfe, werde das forum auf jeden fall weiter besuchen

                  Kommentar


                  • #10
                    Zitat von svr Beitrag anzeigen
                    werde das forum auf jeden fall weiter besuchen
                    Sehr gerne, ich muss an dieser Stelle mal lobend erwähnen, dass du im Gegensatz zu vielen anderen Neulingen hier die Forenregeln gelesen und verstanden zu haben scheinst.
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar

                    Lädt...
                    X