RegExp Hilfe benötigt

12/12/2008 - 11:19 von Frank Kirschner | Report spam
Hallo,
da ich bisher nur mit PHP gearbeitet habe jedoch nun ein Perlscript zur
Logfileauswertung àndern muss, möchte ich um Eure Hilfe bitten bezüglich
RegExp Ausdrücke.

Die zu untersuchenden Logfile Eintràge sehen so aus:

Dec 10 18:08:26 181 postfix/cleanup[13833]: D6ADC9E1902: reject: body
src='http://server1.streamsend.com/strea...4c8&md2'><br><br><a
class='unsubscribe'
href='http://server1.streamsend.com/streamsend/unsubscr from
mailengine2.streamsend.com[72.19.251.189];
from=<streamsendbouncer@mailengine2.streamsend.com> to=<sg@foo.de>
proto=ESMTP helo=<mailengine2.streamsend.com>: 5.7.1
Body-Spamschutzregel 400

elsif($text =~ /Spamschutzregel /o) {event($time, 'rej_policydw');}

Es soll also nach dem Auftreten des Stringes >Spamschutzregel< gesucht
werden, egal ob das steht "Body-Spamschutzregel 400" oder
"Head-Spamschutzregel 123"

-

Dec 12 08:38:06 181 postgrey[32728]: action=greylist, reason=early-retry
(1s missing), client_name=rs2.netinitiative.co.uK,
client_address‰.234.6.17, sender=newsletter@beatsdigital.com,
recipient=info@celebrate.de

elsif($text =~ /action=greylist, reason=early-retry /o)
{event($time,'rej_greyblocked');}

Es soll also nach dem Auftreten des Stringes >action=greylist,
reason=early-retry< gesucht werden.


Leider funktionieren beider Regeln nicht. Die Zeichenfolge "/o" am Ende
des Ausdrucks steht auch im Programm bei anderen RegExp's, welche
funktionieren. Wahrscheinlich hat das eswas mit dem Programm an sich zu tun.

Für Hilfe wàre ich sehr dankbar.

vlg
Frank
 

Lesen sie die antworten

#1 Ferry Bolhar
15/12/2008 - 11:17 | Warnen spam
"Frank Kirschner":

[...]

Leider funktionieren beider Regeln nicht. Die Zeichenfolge "/o" am Ende
des Ausdrucks steht auch im Programm bei anderen RegExp's, welche
funktionieren. Wahrscheinlich hat das eswas mit dem Programm an sich zu tun.



/o bedeutet "optimize" und ist nur von Bedeutung, wenn in der
Regex Variablen verwendet werden. Es besagt, dass der Inhalt
der Variable(n) nur beim ersten Verarbeiten der Regex ausgelesen
wird, danach wird er von der Regex-Enginge gecacht. Spàtere
Änderungen am Variableninhalt werden von der Engine daher nicht
mehr übernommen.

Macht vor allem in Regexen, die in Schleifen verwendet werden,
Sinn, wenn sich der Variablenwert innerhalb der Schleife nicht
àndert. Das Auslesen der Variablen bei jedem Schleifendurchlauf
wird dadurch vermieden, was bei sehr langen Ausdrücken und vielen
Schleifendurchlàufen (> 1000) u.U. Performanceverbesserungen
bringen kann. Praktisch habe ich in meinen Programmen bisher
keinen Unterschied feststellen können.

In Ausdrücken, in denen nur Literale verwendeten werden (wie
in deinen), ist /o bedeutungslos.

Es wàre hilfreich, wenn du schreiben könntest, was genau
"nicht funktioniert".

LG, Ferry

Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail:

Ähnliche fragen