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

Regex Negierung

Dieses Thema im Forum "Coders Talk" wurde erstellt von Mutz87, 9. August 2017.

  1. Mutz87

    Mutz87 Grünschnabel

    Hallo zusammen,

    ich bin neu im regex. Habe die Aufgabe eine Logfilesuche aufzubauen.

    Anforderungen sind folgende:

    Durchsuche die folgende Zeile und finde den Ausdruck "[ERR]", aber ignoriere die Suche wenn "Updating Job" in der Zeile vorkommt.

    Ich habe es mit folgendem Ausdruck versucht, der scheint jedoch nicht zu funktionieren (http://regexr.com/ wird hier als gefunden markiert).

    Code (Text):
    1. \[ERR\].*(?!Updating.Job)


    Suchtext zum melden:


    [01.08.2017 12:41:37.101 CEST]<JobRunner - default>[APPLICATION (HIGH)][HIGH][ERR]: Job Failed ID=10085756 failed.

    Suchtext zum ignorieren:

    [01.08.2017 12:41:37.101 CEST]<JobRunner - default>[APPLICATION (HIGH)][HIGH][ERR]: Updating Job Failed ID=10085756 failed.


    Kann mich hier bitte jemand unterstützen?


    Vielen Dank im Voraus
     
    Zuletzt bearbeitet: 9. August 2017
  2. HonniCilest

    HonniCilest Erfahrenes Mitglied

    Was der Test findet ist der Komplette Text ab [ERR]. Das Liegt daran, dass "Updating Job.*" auch ".*" ist. Wenn es klar ist, dass immer nur ": " zwischen "[ERR]" und " Job" steht, dann würde ich mich darauf beziehen.
     
  3. Mutz87

    Mutz87 Grünschnabel

    Code (Text):
    1. \[[Er][Rr][Rr]\].*:(?!Updating.Job)
    so klappt es leider auch nicht.

    Es kann alles mögliche nach dem ":" stehen, ich will dass er nichts findet, wenn "Updating Job" drin steht.

    Hast Du ein Beispiel?
     
    Zuletzt bearbeitet: 9. August 2017
  4. Mutz87

    Mutz87 Grünschnabel

    Code (Text):
    1. \[[Er][Rr][Rr]\].*:(?!Updating.Job)
    so klappt es leider auch nicht.

    Hast Du ein Beispiel?

    PS: sorry Doppelpost - finde kein "löschen"
     
    Zuletzt bearbeitet: 9. August 2017
  5. vfl_freak

    vfl_freak Premium-User

    Moin,
    was mich jetzt irritiert, ist das '?!' ...
    Die Negierung im RegEx ist doch eigentlich ein Dach '^', gell ?

    VG Klaus
     
  6. Mutz87

    Mutz87 Grünschnabel

    ^ ist doch für Anfang der Zeile oder?

    "Neben den bereits erwähnten Wortgrenzen sind noch zwei weitere Operatoren hilfreich: das Caret oder Dächlein ^ für den Anfang und das Dollarzeichen $ für das Ende einer Zeile. Soll der Ausdruck zum Beispiel Zeilen finden, die mit „Anfang“ beginnen, schreiben Sie"
    ^Anfang
     
  7. vfl_freak

    vfl_freak Premium-User

    Moin,
    auch, aber eben nur als allererstes Zeichen!! In allen anderen Fällen ist es eine Negierung :cool:

    Habe jetzt aber nochmal schnell gesucht, was das ominöse "?!" macht ... kannte ich auch noch nicht :eek:

    Quelle: http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

    VG Klaus
     
  8. Mutz87

    Mutz87 Grünschnabel

    müsste ja eigentlich passen oder?
     
  9. vfl_freak

    vfl_freak Premium-User

    Moin,

    bleibt immer noch die Frage, was mit dem Text dahinter ist ...

    Aber mal dumm gefragt: Du liest doch Dein Logfile vermutlich zeilenweise ein, oder?
    Wäre dann nicht einfacher Vergleich á la string.contains( "ERR" ) && !string.contains( "Updating Job" ) vor der Weiterverarbeitung sinniger ??

    VG Klaus
     
  10. Mutz87

    Mutz87 Grünschnabel


    Der Theorie nach ja, aber das Script ist so gebaut, dass man als Suchstring nur einen Regex angeben kann, alles andere geht leider nicht.
     
Die Seite wird geladen...