regular expressions, Schnittmengen und Teilmengen finden.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • regular expressions, Schnittmengen und Teilmengen finden.

    Hallo !

    Ich betreue eine Applikation (code in perl), die zum Monitoring einer Produktionsumgebung ein config file vorhaelt, in dem die Monitoring-Regeln u.A. auch regular expressions beinhalten.

    Konkret sieht das so aus, dass die Monitoring-Software durch das config file durchgeht (pro Zeile eine Regel) und schaut, ob das angegebene regular expression pattern auf den event passt (der kommt aus nem logfile). Je nach Regel, fuer die ein positiver match gefunden wird, wird eine bestimmte Aktion durchgefuehrt. Es wird nur die erste Regel ausgefuehrt, danach abgebrochen.

    Nun wurden bereits ca 1600-2000 Regeln (je nach Umgebung) zusammengetragen, das Regelfile (config file) ist entsprechend gross (ca 1600 Zeilen) und ich bin dabei, die Regeln zusammenzufassen.

    Wir haben nun folgendes Problem:

    Die Regeln muessen natuerlich in einer bestimmten Reihenfolge im config file enthalten.

    Haben wir z.B. zwei Regeln/Regexps:

    /A.*/
    und
    /.*/

    so ist die Menge der durch das erste Pattern beschriebenen Zeichenfolgen eine Teilmenge der durch das zweite Pattern beschriebenen Zeichenfolgen. Die erste Regel muss dann immer ueber der zweiten Regel im Configfile stehen, um nicht unterzugehen, weil ja die zweite Regel auf jeden Fall zutreffen wuerde.

    Wie gehe ich sowas an? Ich will ein script schreiben, welches mir ermoeglicht, zwei beliebige Regular Expressions auf Teilmenge bzw. Schnittmenge zu vergleiche. Am liebsten waer mir im Ende ne Funktion in meinem Script, welche mir zwei regexp-strings vergleicht und einfach sagt ob die regexps jeweils Teilmengen von der anderen beschrieben.

    Hat da jemand ne Idee, wo ich ansetzen koennte ? Ich muesste vermutlich erstmal die regexps in irgendeine Art von Normalform bringen und dann paarweise reduzieren.

    Gruss
    Felix
  • Hi,

    klar hast du die Möglichkeit die Ausdrücke irgendwie zu gruppieren. Dazu könntest du einen Prefix einführen.

    Aber saubrerer und effizienter ist es natürlich abhängige Ausdrücke zu kombinieren.

    Erstmal musst du dir klarmachen, dass es zu jedem regulären Ausdruck ein gleichwertiger endliche Automat existiert. Wenn du alle regulären Ausdrücke in Automaten umgewandelt hast, kannst du die entsprechenden Automaten kombinieren.

    Wie das geht habe ich in unserem Coder Wiki beschrieben:
    [coderwiki]HowTos/Theorie-Schnittmenge-mehrerer-Automaten[/coderwiki]

    Der ganze Spaß ist natürlich ein riesiger Aufwand. Es gibt auch Programme, die dir aus Regulären Ausdrücken Automaten erstellen. Mir ist aber keine Komplettlösung bekannt, die die Automaten kombiniert und dann wieder zurück in eine reguläre Sprache bringt.