Regulärer ausdruck

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

  • Regulärer ausdruck

    ich dacht vllt kann mir mal nochmal jemand helfen bei einem regulärem ausdruck:

    Dies ist das was ich bereitz habe:
    PHP-Code:
    $datei fopen ("00000004.log""r");
    $values = array();
    while(!
    feof($datei)){   
        
    $zeile fgets($datei,1024);
        
    preg_match("#^\s\[.*\]\sNew\sConnection\s\(.*\)\s([0-9.:]+)\s\[([a-z0-9]{32})\] \"(.+)\"[^\n]*#"$zeile$treffer);
        
    array_push($values"'".$treffer[1]."','".$treffer[2]."','".$treffer[3]."'");
    }
    fclose($datei);  

    var_dump($values); 
    die anfangs datei sieht so aus:
    http://web-manni.de/00000004.log

    Die ausgabe sieht leider so aus:
    http://projekte.web-manni.de/ranking...n%20insert.php

    Weiß vllt einer von euch woran das liegen könnte

  • #2
    kannst du bitte eine frage stellen? ich glaube nicht, dass jemand sich dein problem _selbst_ erarbeiten möchte.

    also, bei regexp-problemen, immer:

    1. testdaten zeigen
    2. sinn des ausdrucks erklären
    3. gewünschtes ergebnis zeigen, aktuelles ergebnis zeigen

    Kommentar


    • #3
      aahh ok sorry
      Also ich will in der Datei danach suchen

      [04.07.2007 03:44:22] New Connection (slot #1) [COLOR=green]84.56.236.47:12886[/COLOR][ [COLOR=orange]b9dcdce5af48d3290ad6a1c06f4cad16[/COLOR]]" [COLOR=red]$0S$1y$0N$1t$0A$1x $0E$1r$0R$1o[/COLOR]" (seq 8595800)
      [COLOR=green]ip[/COLOR]
      [COLOR=orange]pb_guid[/COLOR]
      [COLOR=red]name[/COLOR]

      Danach will ich dies dann so zum beispiel in eine mysql datenbank schreiben:

      PHP-Code:
      $query "INSERT INTO ranking1 (ip, pb_guid ,name) Values " implode(" ,"$values);
      mysql_query ($query) or die("MySQL-Fehler:<br>$query<br>" mysql_error()); 

      Kommentar


      • #4
        finde deinen ausdruck nicht sehr passend..
        könnte etwas in diese richtung gehen:
        http://regexp-evaluator.de/evaluator...768d/#ergebnis

        Kommentar


        • #5
          kann es auch sein das es nicht geht, den wenn ich mal genau das hier nehm:
          PHP-Code:
          <?PHP
            
          //
            // Text, der durchsucht werden soll
            //
            
          $subject '[04.07.2007 03:44:22] New Connection (slot #1) 84.56.236.47:12886[ b9dcdce5af48d3290ad6a1c06f4cad16]\" $0S$1y$0N$1t$0A$1x $0E$1r$0R$1o\" (seq 8595800)';
            
          //
            // Der Reguläre Ausdruck
            //
            
          $pattern '!.*\) (.*)\[(.*)\]\"(.*)\"!isU';
            
          //
            // RegExp auswerten
            //
            
          $result preg_match_all($pattern$subject$subpattern);
            
          //
            // Ergebnis ausgeben
            //
            
          echo '<p>Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text '.
                 ((
          $result) ? $result.' mal ' 'nicht ').'zu.</p>';
            
          //
            // Unterausdrücke ausgeben
            //
            
          echo '<pre>'.print_r($subpatternTRUE).'</pre>';
          ?>
          findet er bei mir nichts

          Kommentar


          • #6
            nein, kann nicht sein.

            und copy-paste ohne verstand ist garantiert nicht der richtige weg.
            du musst schon verstehen, was dort passiert.

            Kommentar


            • #7
              ok hab mich nun mal genauer hingeschaut und gesehen das eine leerzeichen gefehlt hat.

              nun habe ich das hier, das auch wunderbar funktioniert:

              PHP-Code:
              $datei fopen ("00000004.log""r");


              /*Absuche nach relevanten Daten*/

              $values = array();
              while(!
              feof($datei)){   
                  
              $zeile fgets($datei,1024);
              // Der Reguläre Ausdruck
                //
                
              $pattern '!.*\) (.*)\[(.*)\] \"(.*)\"!isU';
                
              //
                // RegExp auswerten
                //
                
              $result preg_match_all($pattern$zeile$subpattern);
                
              //
                // Unterausdrücke ausgeben
                //
                  
              echo'<pre>'.print_r($subpatternTRUE).'</pre>';
              }
              fclose($datei); 
              aber ^^ jetzt gibt er mir sämtliche arrays genau genommen für jede zeile eben aus. wie schaffe ich es jetzt nun, das ich nur die arrays, die voll sind also kein "" haben irgendwie dann in eine form zu bringen, das ich diese dann in meine db einlesen kann

              Kommentar


              • #8
                Indem du prüfst ob die Zeile / der Eintrag leer ist oder nicht. Informiere dich über empty, isset und PHP Grundlagen.
                Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                Kommentar


                • #9
                  thx habe es aber mit ne einfachen if abfrage ob der treffer "" ist gelöst

                  Kommentar

                  Lädt...
                  X