Écrire des expressions d'extraction de champs étendus performantes

Les conseils suivants vous permettront d'écrire une expression d'extraction de champs étendus performante :

Pour les constructions d'expression rationnelle pouvant être utilisées pour l'extraction de champs étendus, voir la documentation sur Java Platform Standard, éd. 8. Notez que certaines structures peuvent ne pas fonctionner comme prévu car la macro d'extraction de champ étendu utilise des caractères {}.

  • Assurez-vous que l'expression d'extraction de champs étendus ne comporte pas d'expression rationnelle "Tout mettre en correspondance" (.* ou \s*\S*) au début ou à la fin. L'expression d'extraction de champs étendus comme dans l'exemple ci-dessous n'est pas autorisée :

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

    Utilisez plutôt l'expression suivante :

    (?:[-]*)\s*Call\s+Stack\s+Trace\s*(?:[-]*){callstk:[\s\S]*?}(?:[-]*)\s*Binary
  • L'expression d'extraction de champs étendus doit limiter l'utilisation de l'expression rationnelle "Tout mettre en correspondance" (.* ou \s*\S*) à 4. Prenons l'exemple suivant :

    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:[^"]*}\"

    Cette expression utilise .* 10 fois, ce qui n'est pas autorisé. Décomposez l'expression en plusieurs expressions pour vous assurer que chaque expression utilise .* jusqu'à 4 fois.

  • L'expression d'extraction de champs étendus n'utilise pas plus de 4 conditions ou alternatives. Voici un exemple :

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

    Cette expression n'est pas autorisée car elle comporte 6 conditions. Fractionnez cette expression en 2 expressions comme suit, auquel cas chaque expression a 3 conditions :

    ^\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+}
  • L'expression d'extraction de champs étendus contient du texte statique. Prenons l'exemple suivant :

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

    Cette expression ne comporte pas de texte statique. Veillez à ce que l'expression comporte au moins un minimum de texte statique, voire davantage.

Si l'une de ces règles n'est pas respectée, elle sera signalée et devra être corrigée avant que l'expression d'extraction de champs étendus puisse être enregistrée.

Une fois que l'expression d'extraction de champs étendus est conforme aux règles ci-dessus, la fonctionnalité de test correspond à l'exemple de contenu de champ de base avec l'expression et indique le statut de la mise en correspondance. Le statut de la mise en correspondance peut indiquer une réussite, un échec ou une erreur. En cas d'échec ou d'erreur, corrigez l'expression et relancez le test.