Regex Negierung

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:
\[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:

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.
 

Mutz87

Grünschnabel
Code:
\[[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:

Mutz87

Grünschnabel
Code:
\[[Er][Rr][Rr]\].*:(?!Updating.Job)

so klappt es leider auch nicht.

Hast Du ein Beispiel?

PS: sorry Doppelpost - finde kein "löschen"
 
Zuletzt bearbeitet:

Mutz87

Grünschnabel
Moin,

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

VG Klaus

^ 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
 

vfl_freak

Premium-User
Moin,
^ ist doch für Anfang der Zeile oder?
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:
http://www.vogella.com/tutorials/JavaRegularExpressions/article.html#negative-look-ahead
Negative look ahead provides the possibility to exclude a pattern. With this you can say that a string should not be followed by another string.
Negative look ahead are defined via (?!pattern).
For example, the following will match "a" if "a" is not followed by "b".
a(?!b)

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

VG Klaus
 

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
 

Mutz87

Grünschnabel
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


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

Neue Beiträge