Reguläre Ausdrücke sind eine feine Sache, aber sie sind alles andere als einfach. Die Grundlagen erlernt man relativ schnell, aber getreu dem Motto „schlimmer geht’s immer“, gibt es Aufgaben, bei denen man mit seinem Latein schnell am Ende ist.
Bei Regulären Ausdrücken war das für mich immer die Negierung von Zeichenketten. Ein Beispiel ist das Apache error_log, auf das man immer ein Auge haben sollte. Aber nicht bei jedem ‚File does not exist‘ möchte man alamiert werden.
Nicht interessant sind solche Einträge wie:
[Thu Mar 23 10:52:23 2010] [error] [client 127.0.01] File does not exist: /var/www/foo/bar
Aber fatale PHP Fehler sollten schon auffallen:
[Tue Mar 24 16:50:57 2010] [error] [client 127.0.01] PHP Fatal error: foo bar
Die Lösung heißt negative lookaheads (?!negativePattern)
und könnte für die obige Aufgabe so aussehen:
[error]s[clientsS+]s(?!Filesdoessnotsexist)
Fertig.