Performante Extract-Ausdrücke für erweiterte Felder schreiben

Mit den folgenden Tipps können Sie performante Extract-Ausdrücke für erweiterte Felder schreiben:

Informationen zu regulären Ausdruckskonstrukten, die für die erweiterte Feldextraktion verwendet werden können, finden Sie in der Dokumentation zu Java Platform Standard Ed. 8. Beachten Sie, dass einige der Konstrukte möglicherweise nicht wie erwartet funktionieren, da das Extraktionsmakro für erweiterte Felder {} Zeichen verwendet.

  • Stellen Sie sicher, dass der Extract-Ausdruck für das erweiterte Feld keinen regulären Ausdruck für "Allen entsprechen" (.* oder \s*\S*) am Anfang oder am Ende aufweist. Der Extract-Ausdruck für das erweiterte Feld im folgenden Beispiel ist nicht zulässig:

    .*(?:[-]*)\s*Call\s+Stack\s+Trace\s*(?:[-]*){callstk:[\s\S]*?}(?:[-]*)\s*Binary.*

    Verwenden Sie stattdessen den folgenden Ausdruck:

    (?:[-]*)\s*Call\s+Stack\s+Trace\s*(?:[-]*){callstk:[\s\S]*?}(?:[-]*)\s*Binary
  • Der Extract-Ausdruck für das erweiterte Feld muss den regulären Ausdruck für "Allen entsprechen" (.* oder \s*\S*) auf 4 beschränken. Siehe folgendes Beispiel:

    AVDFAlert.*EVENT\S+=\(AN=\"{sefAction:[^"]+}\"\s+AT=\"{sefEndEventTime:[^"]+}\"\s+ASE=\"{sevlvl:[^"]*}\".*URL=\"{detailloc:[^"]*}\".*STN=\"{sefSourceEPName:[^"]*}\".*STT=\"{sefSourceEPType:[^"]*}\".*EN=\"{eventid:[^"]*}\"\s+ET=\"{sefStartEventTime:[^"]+}\".*ES=\"{status:[^"]*}\"\s+CC=\"{sefCommand:[^"]*}\".*UN=\"{sefSourceEPAccountName:[^"]*}\"\s+CHN=\"{sefActorEPName:[^"]*}\"\s+CIP=\"{sefActorEPNwAddress:[^"]*}\".*TOBJ=\"{eventtarget:[^"]*}\".*TTYPE=\"{eventtargettype:[^"]*}\".*TS=\"{sefSourceEPAccountSummaryRisk:[^"]*}\"

    Dieser Ausdruck verwendet .* 10 Mal, was nicht zulässig ist. Teilen Sie den Ausdruck in mehrere Ausdrücke auf, um sicherzustellen, dass jeder Ausdruck .* höchstens 4 Mal verwendet.

  • Der Extract-Ausdruck für das erweiterte Feld verwendet nicht mehr als 4 Bedingungen oder Alternativen. Siehe das folgende Beispiel:

    ^\s*\S+\s+:\s+TTY=.*COMMAND=\s*\S*\/(cat|find|ls|more|tail|wc)\s+(-\w+\s+)?{msecrsrcname:\S+}

    Dieser Ausdruck ist nicht zulässig, da er 6 Bedingungen enthält. Teilen Sie diesen Ausdruck wie folgt in 2 Ausdrücke auf, von denen jeder 3 Bedingungen aufweist:

    ^\s*\S+\s+:\s+TTY=.*COMMAND=\s*\S*\/(cat|find|ls)\s+(-\w+\s+)?{msecrsrcname:\S+}
    ^\s*\S+\s+:\s+TTY=.*COMMAND=\s*\S*\/(more|tail|wc)\s+(-\w+\s+)?{msecrsrcname:\S+}
  • Der Extract-Ausdruck für das erweiterte Feld enthält statischen Text. Siehe folgendes Beispiel:

    (?:POST|PUT|DELETE)\s+[^"]*"\s+(?:-)?(\d+)?\s+{contszin:\d+}

    Dieser Ausdruck enthält keinen statischen Text. Stellen Sie sicher, dass der Ausdruck ein Minimum an statischem Text enthält.

Wenn eine dieser Regeln verletzt wird, wird das Problem gemeldet. Es muss dann vor dem Speichern des Extract-Ausdrucks für das erweiterte Feld behoben werden.

Wenn der Extract-Ausdruck für erweitertes Feld den obigen Regeln entspricht, vergleicht die Test-Funktion den Beispielinhalt für Basisfeld mit dem Ausdruck und meldet den Abgleichsstatus. Der Abgleichsstatus kann "Erfolgreich" oder "Fehler" sein. Beheben Sie bei einem Fehler den Ausdruck, und wiederholen Sie den Test.