Regulärer Ausdruck

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

  • Regulärer Ausdruck

    ich habe einen code mit dem man eine html tabelle auslesen kann!

    PHP-Code:
    $str "slfdksjdf lkj 
    <table>
    <tr><td>eine</td><td>tolle</td><td>tabelle</td></tr>
    <tr><td>mit</td><td>viel</td><td>inhalt</td></tr>
    </table>
    sdf
    sdf
    <table>
    <tr><td>zweite</td><td>tabelle</td></tr>
    </table>
    sdf"
    ;

    preg_match_all("/<table>(.*)<\/table>/siU",$str,$tables);

    echo 
    "<pre>";
    //print_r($tables[1]);

    // loop trough each table 
    foreach($tables[1] as $tablecontents) {
      echo 
    "-----------------------------<br>";
      
    preg_match_all("/<tr>(.*)<\/tr>/siU",$tablecontents,$rows);
      
    // loop trough each row
      
    foreach($rows[1] as $row) {
          
    preg_match_all("/<td>(.*)<\/td>/siU",$row,$cols);
    //    echo "<pre>";
    //    print_r($cols[1]);
          
    foreach($cols[1] as $col
            echo 
    "| $col";
          echo 
    "|<br>";
      }
      echo 
    "-----------------------------<br><br>";
    //  echo "<pre>";
    //  print_r($rows[1]); 

    aber wie kann ich nun eine kopierte tabelle parsen ?
    zwischen </td></td> ist ja immer ein leerzeichen und zwischen </tr><tr> eine leerzeile!

    ich müsste das parsen:

    Aktion: Angriff 02.12.2005 18:12:18
    Von: WKWIKI_Finser's 001 WKWIKI_de (56:19:22)
    Nach: ElliRutsch's D-Day000 (46:39:14)
    Vor dem Kampf Angreifer Verteidiger
    Fallschirmjäger 0 783
    MG-Schütze 100 333
    Raketenwerfer 690 180
    Versorgungstruck 14 8
    Spähpanzer 4 8
    Schützenpanzer 34 52
    Flakpanzer 6 17
    Kampfpanzer 204 0
    Artilleriegeschütz 10 0
    Jäger 1 0
    Verluste Angreifer Verteidiger
    Fallschirmjäger 0 754
    MG-Schütze 100 321
    Raketenwerfer 690 173
    Versorgungstruck 14 8
    Spähpanzer 4 8
    Schützenpanzer 34 50
    Flakpanzer 6 16
    Kampfpanzer 204 0
    Artilleriegeschütz 10 0
    Jäger 1 0
    archivieren | löschen

    wobei hier alles außer den zahlen statisch ist!
    Zuletzt geändert von ThaDafinser; 04.12.2005, 19:40.

  • #2
    kann mir wenigstens jemand den ausdruck sagen für ne leerzeile ?

    [:space:] ist ja leerzeichen
    und ne neue zeile ?

    \n wie in c++ ?

    Kommentar


    • #3
      Original geschrieben von ThaDafinser
      kann mir wenigstens jemand den ausdruck sagen für ne leerzeile ?

      [:space:] ist ja leerzeichen
      und ne neue zeile ?

      \n wie in c++ ?
      ja, aber mit doppelten Anführungszeichen, sodass es als ein Newline angesehen wird

      "\n+"
      passt auf newline
      '\n+'
      passt auf den String \n

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        PHP-Code:
        preg_match_all("/Vor(.*)Flakpanzer/siU",$str,$tables);

        echo 
        "<pre>";
        foreach(
        $tables[1] as $tablecontents) {

        echo 
        $tablecontents;

        //bis hier alles inordnung (richtig), darunter fehlt noch der richtige syntax !

          
        preg_match_all('/"\n+"(.*)"\n+"/siU',$tablecontents,$rows);
          echo 
        $rows;

          foreach(
        $rows[1] as $row) {
              
        preg_match_all("/<td>(.*)<\/td>/siU",$row,$cols);

              foreach(
        $cols[1] as $col
                echo 
        "| $col";
              echo 
        "|<br>";
          }
          echo 
        "-----------------------------<br><br>";


        irgendwie komm ich da nimmer weiter
        bis zum kommentar funktioniert ja alles ! (hab ich ja mit echo $tablecontents; getestet...
        oben ist ja der teil den ich auslesen will !
        das ende ist ja das "\n+" aber wie mach ich das mit anfang ?
        [A-Z] ?
        also ungefähr so :
        preg_match_all('/[A-Z](.*)"\n+"/siU',$tablecontents,$rows);

        nur die syntax stimmt sicher ned

        arbeite eben zum ersten mal mit regulären ausdrücken, entschuldigung für meine "nichtwissenheit"

        Kommentar


        • #5
          Anfang einer Zeile ist ^ und Ende $, sofern du den Pattern-Modifier m verwendest
          http://de.php.net/manual/de/referenc....modifiers.php

          (das war doch das was du wolltest, oder? *nach erneutem Lesen des Posts nicht mehr so sicher ist* >.>)

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            ja, da war ich jetzt schon nen paar stunden auf der seite

            preg_match_all('^[A-Z](.*)$("\n+")',$tablecontents,$rows);

            so hab ich mir das gedacht, aber da ist ja nen syntaxfehler !



            preg_match_all('/^[A-Z](.*)$("\n+")/siU',$tablecontents,$rows);

            und so ist ja wieder kein rückgabewert

            die syntax bei den regulären ausdrücken ist für mich noch ein bisschen kompliziert....
            das theoretische würd ich ja kapieren, aber wie schreiben ,....

            Kommentar


            • #7
              PHP-Code:
              foreach($tables[1] as $tablecontents) {
              echo 
              $tablecontents;
              echo 
              "rows";
                echo 
              "-----------------------------<br>";
                
              preg_match_all('/^([A-Z])(.*)\$(\n+)/',$tablecontents,$rows);
                
              print_r($rows);

                
              // loop trough each row
                
              foreach($rows[1] as $row) {
                    
              preg_match_all('^([_a-zA-Z]|[0-9])(.*)\$',$row,$cols);
              //    echo "<pre>";
              //    print_r($cols[1]);
                    
              foreach($cols[1] as $col
                      echo 
              "| $col";
                    echo 
              "|<br>";
                }
                echo 
              "-----------------------------<br><br>";
              //  echo "<pre>";
              //  print_r($rows[1]); 

              das gibt jetzt print_r($rows); aus:
              ArrayArray
              (
              [0] => Array
              (
              )

              [1] => Array
              (
              )

              [2] => Array
              (
              )

              [3] => Array
              (
              )

              )

              preg_match_all('^([_a-zA-Z]|[0-9])(.*)\$',$row,$cols);
              ist da noch ein fehler, oder ist davor noch ein fehler ?

              ich weiß ich nerve !

              Kommentar

              Lädt...
              X