1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Logdatei mit Regex auslesen

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von -H-T-P-, 4. Dezember 2014.

  1. -H-T-P-

    -H-T-P- Mitglied

    Hallo,

    ich möchte eine Logdatei auslesen die ungefär so aussieht:
    Code (Text):
    1. 1 Text
    2. 2 Text
    3.     Detailslkjflskdjflkjdglkjgfff
    4.     läölgädflögädlög
    5. 3 Text
    6. 4 Text
    7.     Detailsöälälgdfäglödf
    8.     ölfkgödflgkdöllöd
    9.     ödlgkdöflgk
    Ein Eintrag besteht aus der Nummer, den dahinterstehenden Text und die optionalen Zeilen die drunter stehen.

    Regex müsste mir jedes einzelne Element in einer Gruppe speichern, damit ich es später mit C# weiterverwenden kann.

    Der Anfang könnte so aussehen:
    Code (Text):
    1. (?<number>\d+)\s+(?<text>\w+)
    Jetzt ist nur die Frage wie ich die optionalen Zeilen auslesen kann.

    Könnt ihr mir weiterhelfen?
     
  2. ComFreek

    ComFreek Mod | @comfreek Moderator

  3. -H-T-P-

    -H-T-P- Mitglied

    Das habe ich auch schon überlegt, aber da kann ich ja nur versuchen den nächsten Eintrag zu suchen; das funktioniert aber nicht beim Letzten.
     
  4. ComFreek

    ComFreek Mod | @comfreek Moderator

    Folgendes funktioniert:
    Code (PHP):
    1. <?php
    2.  
    3. $str = <<< EOF
    4. 1 Test
    5. Zeilen
    6. 2 Blub
    7. Zeilen, Dateiende
    8. EOF;
    9.  
    10. preg_match_all('/(\d)\s\w+[^\d]*((?=\d)|$)/', $str, $matches);
    11. var_dump($matches);
    Live: https://eval.in/230544
     
  5. -H-T-P-

    -H-T-P- Mitglied

    Das hat mir schon weitergeholfen.

    Muss leider zugeben, dass ich bei den Beispiel oben bisschen faul war.
    Die Nummer ist ein Datum und die anderen Texte können auch Zahlen beinhalten.

    Zum Beispiel:
    Code (Text):
    1. 01.01.2014 Das ist der 1.Test!$?
    2. 02.01.2014 Überschrift !$?
    3.     Irgendein "komischer"
    4.     Text mit Sonderzeichen und Zahlen 12345!
    5. 03.01.2014 Text
    6. 04.01.2014 Foo===
    7.     Irgendein "komischer"
    8.     Text mit Sonderzeichen und Zahlen 12345!
    Folgendes Regex habe ich jetzt, was auch funktioniert:
    Code (Text):
    1. (?<date>\d+.\d+.\d+.\d+)\s(?<title>.*?)\r(?<message>.*?)((?=(\d+.\d+.\d+.\d+))|$)
    Wenn du eine elegantere Lösung kennst, immer her damit. ;)

    Ansonsten vielen Dank für deine Hilfe!
     
  6. Spyke

    Spyke Capoeirista Premium-User

    Ich hätte einfach die Datei Zeilenweise ausgelesen und geprüft ob die Zeile mit einem Datum beginnt.
    Datum = Ja -> neue Gruppe
    Datum = Nein -> gehört zur vorherigen Gruppe
     
Die Seite wird geladen...