Regex-Syntax

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Dieser Artikel enthält eine Übersicht über die Syntax regulärer Ausdrücke, die von Kusto-Abfragesprache (KQL) unterstützt wird.

Es gibt eine Reihe von KQL-Operatoren und -Funktionen, die Zeichenfolgenabgleich, Auswahl und Extraktion mit regulären Ausdrücken ausführen, z matches regex. B. , parseund replace_regex().

In KQL müssen reguläre Ausdrücke als Zeichenfolgenliterale codiert werden und den Zeichenfolgen-Quotingregeln entsprechen. Beispielsweise wird der reguläre Ausdruck \A in KQL als "\\A". Der zusätzliche umgekehrte Schrägstrich gibt an, dass der andere umgekehrte Schrägstrich Teil des regulären Ausdrucks \Aist.

Syntax

In den folgenden Abschnitten wird die von Kusto unterstützte Syntax des regulären Ausdrucks dokumentiert.

Übereinstimmung mit einem Zeichen

Muster Beschreibung
. Beliebiges Zeichen mit Ausnahme einer neuen Zeile (enthält neue Zeile mit Kennzeichnung)
[0-9] Beliebige ASCII-Ziffer
\d Ziffer (\p{Nd})
\D Keine Ziffer
\pX Unicode-Zeichenklasse, die durch einen 1-Buchstaben-Namen identifiziert wird
\p{Greek} Unicode-Zeichenklasse (allgemeine Kategorie oder Skript)
\PX Negierte Unicode-Zeichenklasse, die durch einen Einbuchstabennamen identifiziert wird
\P{Greek} Negated Unicode-Zeichenklasse (allgemeine Kategorie oder Skript)

Zeichenklassen

Muster Beschreibung
[xyz] Zeichenklasse, die entweder x, y oder z (Union) abgleicht.
[^xyz] Zeichenklasse, die einem beliebigen Zeichen mit Ausnahme von x, y und z entsprechen.
[a-z] Zeichenklasse, die einem beliebigen Zeichen im Bereich a-z entsprechen.
[[:alpha:]] ASCII-Zeichenklasse ([A-Za-z])
[[:^alpha:]] Negierte ASCII-Zeichenklasse ([^A-Za-z])
[x[^xyz]] Geschachtelte/gruppierende Zeichenklasse (mit einem beliebigen Zeichen außer y und z)
[a-y&&xyz] Schnittmenge (übereinstimmende x oder y)
[0-9&&[^4]] Subtraktion mit Schnittmenge und Negation (übereinstimmend 0-9 außer 4)
[0-9--4] Direkte Subtraktion (ab 0-9 außer 4)
[a-g~~b-h] Symmetrischer Unterschied (abgleichen a und h nur)
[\[\]] Escape in Zeichenklassen (übereinstimmend [ oder ])
[a&&b] Leere Zeichenklasse, die nichts abgleicht

Hinweis

Eine benannte [...] Zeichenklasse kann in einer Klammernzeichenklasse angezeigt werden. Entspricht z. B [\p{Greek}[:digit:]] . einer beliebigen ASCII-Ziffer oder einem beliebigen Codepoint im Greek Skript. [\p{Greek}&&\pL] entspricht griechischen Buchstaben.

Rangfolge in Zeichenklassen ist von der meisten Bindung bis zur geringsten Bindung:

  1. Schussbereiche: [a-cd] == [[a-c]d]
  2. Vereinigung: [ab&&bc] == [[ab]&&[bc]]
  3. Schnittmenge, Differenz, symmetrischer Unterschied: Alle weisen eine gleichwertige Rangfolge auf und werden von links nach rechts ausgewertet. Beispiel: [\pL--\p{Greek}&&\p{Uppercase}] == [[\pL--\p{Greek}]&&\p{Uppercase}].
  4. Negation: [^a-z&&b] == [^[a-z&&b]].

Verbundwerkstoffe

Muster Beschreibung
xy Verkettung (x gefolgt von y)
x\|y Alternation (x oder y , prefer x)

Wiederholungen

Muster Beschreibung
x* Null oder mehr von x (gierig)
x+ Mindestens ein x (gierig)
x? Null oder eine von x (gierig)
x*? Null oder mehr von x (ungreedy/lazy)
x+? Mindestens ein x (ungreedy/lazy)
x?? Null oder eine von x (ungreedy/lazy)
x{n,m} Mindestens n x und höchstens m x (gierig)
x{n,} Mindestens n x (gierig)
x{n} Genau n x
x{n,m}? Mindestens n x und höchstens m x (ungreedy/lazy)
x{n,}? Mindestens n x (ungreedy/lazy)
x{n}? Genau n x

Leere Übereinstimmungen

Muster Beschreibung
^ Beginn eines Heuhaufens (oder Start-of-Line mit mehrzeiligem Modus)
$ Ende eines Heuhaufens (oder Ende der Linie mit mehrzeiligem Modus)
\A Nur der Anfang eines Heuhaufens (auch mit aktiviertem mehrzeiligen Modus)
\z Nur das Ende eines Heuhaufens (auch mit aktiviertem Mehrzeilenmodus)
\b Unicode-Wortgrenze (\w auf einer Seite und \W, \Aoder \z auf einer anderen)
\B Keine Unicode-Wortgrenze
\b{start}, \< Unicode-Anfang-von-Wort-Grenze (\W\|\A links, \w rechts)
\b{end}, \> Unicode-End-of-Word-Grenze (\w links, \W\|\z rechts)
\b{start-half} Hälfte einer Unicode-Anfangs-von-Wort-Grenze (\W\|\A links)
\b{end-half} Hälfte einer Unicode-End-of-Word-Grenze (\W\|\z rechts)

Gruppieren und Kennzeichnen

Muster Beschreibung
(exp) Nummerierte Erfassungsgruppe (indiziert durch öffnende Klammer)
(?P<name>exp) Benannte (auch nummerierte) Erfassungsgruppe (Namen müssen alphanumerisch sein)
(?<name>exp) Benannte (auch nummerierte) Erfassungsgruppe (Namen müssen alphanumerisch sein)
(?:exp) Gruppe ohne Erfassung
(?flags) Festlegen von Kennzeichnungen innerhalb der aktuellen Gruppe
(?flags:exp) Festlegen von Kennzeichnungen für exp (nicht erfassen)

Capture group names can contain only alpha-numeric unicode codepoints, dots., unterstrichs, and square brackets[ _and ]. Namen müssen entweder mit einem _ oder einem alphabetischen Codepoint beginnen. Alphabetische Codepunkte entsprechen der Alphabetic Unicode-Eigenschaft, während numerische Codepunkte der Vereinigung der Decimal_NumberKategorien Letter_Number und Other_Number allgemeinen Kategorien entsprechen.

Kennzeichnungen sind einzelne Zeichen. Legt z. B. (?x) die Kennzeichnung x fest und (?-x) löscht die Kennzeichnung x. Mehrere Flags können gleichzeitig festgelegt oder gelöscht werden: (?xy) Legt sowohl die x y Kennzeichen als auch die x Kennzeichnung fest und (?x-y) löscht die Kennzeichnung und löscht die y Kennzeichnung. Standardmäßig sind alle Flags deaktiviert, sofern nicht anders angegeben. Sie lauten wie folgt:

Flag Beschreibung
i Groß-/Kleinschreibung wird beachtet: Buchstaben stimmen sowohl groß- als auch kleinbuchstaben überein.
m Mehrzeiligen Modus: ^ und $ Anfang/Ende der Zeile abgleichen
s Punkt (.) zulassen. übereinstimmungen \n
R Aktiviert den CRLF-Modus: Wenn der mehrzeilige Modus aktiviert ist, wird er verwendet. \r\n
U Tauschen Sie die Bedeutung von x* und x*?
u Unicode-Unterstützung (standardmäßig aktiviert)
x Ausführlicher Modus, ignoriert Leerzeichen und lässt Zeilenkommentar s zu (beginnend mit #)

Beachten Sie, dass im ausführlichen Modus Leerzeichen überall ignoriert werden, auch innerhalb von Zeichenklassen. Verwenden Sie zum Einfügen von Leerzeichen die Escapeform oder ein Hexadeliteral. Beispielsweise \ \x20 für ein ASCII-Leerzeichen.

Hinweis

  • Flags können innerhalb eines Musters umgeschaltet werden. Die folgende Syntax verwendet z. B. eine Übereinstimmung zwischen Groß- und Kleinschreibung für den ersten Teil und eine Übereinstimmung mit Groß-/Kleinschreibung für den zweiten Teil: (?i)a+(?-i)b+
  • a+ entspricht entweder a oder A, aber die b+ einzigen Übereinstimmungen b.
  • Der mehrzeilige Modus bedeutet ^ und $ entspricht nicht mehr nur am Anfang oder Ende der Eingabe, sondern auch am Anfang oder Ende der Zeile. Beachten Sie, dass ^ Übereinstimmungen nach neuen Zeilen auch am Ende der Eingabe übereinstimmen.
  • Wenn sowohl DER CRLF-Modus als auch der mehrzeilige Modus aktiviert sind, ^ stimmen Sie $ beide \r und \n, aber nie in der Mitte eines \r\n.
  • Der Unicode-Modus kann auch selektiv deaktiviert werden, obwohl nur dann, wenn das Ergebnis nicht mit ungültigen UTF-8 übereinstimmen würde. Wenn Sie z. B. anstelle einer Unicode-Wortgrenze eine ASCII-Wortgrenze verwenden, können einige regex-Suchvorgänge schneller ausgeführt werden: (?-u:\b).+(?-u:\b) übereinstimmungen $$abc$$.

Escapesequenzen

Muster Beschreibung
\* Literal *, gilt für alle ASCII außer [0-9A-Za-z<>]
\a Glocke (\x07)
\f Formularfeed (\x0C)
\t Horizontaler Tabulator
\n Zeilenwechsel
\r Wagenrücklauf
\v Vertikale Registerkarte (\x0B)
\A Übereinstimmungen am Anfang eines Heuhaufens
\z Übereinstimmungen am Ende eines Heuhaufens
\b Word-Begrenzungs assertion
\B Negierte Wortbegrenzungs assertion
\b{start}, \< Start-of-Word-Begrenzungsbehauptung
\b{end}, \> End-of-Word-Begrenzungs assertion
\b{start-half} Hälfte einer Anfangs-of-Wort-Begrenzungsbehauptung
\b{end-half} Hälfte einer End-of-Word-Begrenzungsbehauptung
\123 Oktalzeichencode, bis zu drei Ziffern
\x7F Hexzeichencode (genau zwei Ziffern)
\x{10FFFF} Hexzeichencode, der einem Unicode-Codepunkt entspricht
\u007F Hexzeichencode (genau vier Ziffern)
\u{7F} Hexzeichencode, der einem Unicode-Codepunkt entspricht
\U0000007F Hexzeichencode (genau acht Ziffern)
\U{7F} Hexzeichencode, der einem Unicode-Codepunkt entspricht
\p{Letter} Unicode-Zeichenklasse
\P{Letter} Negated Unicode-Zeichenklasse
\d, \s\w Perl-Zeichenklasse
\D, \S\W Negated Perl-Zeichenklasse

Perl-Zeichenklassen (Unicode-freundlich)

Diese Klassen basieren auf den Definitionen, die in UTS#18 bereitgestellt werden:

Muster Beschreibung
\d Ddigit (\p{Nd})
\D Keine Ziffer
\s Leerzeichen (\p{White_Space})
\S Keine Leerzeichen
\w Word-Zeichen (\p{Alphabetic}\d + \p{Pc}\p{M}\p{Join_Control} + + + )
\W Kein Wortzeichen

ASCII-Zeichenklassen

Diese Klassen basieren auf den Definitionen, die in UTS#18 bereitgestellt werden:

Muster Beschreibung
[[:alnum:]] Alphanumerisch ([0-9A-Za-z])
[[:alpha:]] Alphabetisch ([A-Za-z])
[[:ascii:]] ASCII ([\x00-\x7F])
[[:blank:]] Leer ([\t ])
[[:cntrl:]] Steuerelement ([\x00-\x1F\x7F])
[[:digit:]] Ziffern ([0-9])
[[:graph:]] Grafisch ([!-~])
[[:lower:]] Kleinbuchstabe ([a-z])
[[:print:]] Druckbar ([ -~])
[[:punct:]] Interpunktion ([!-/:-@\[-`{-~])
[[:space:]] Leerzeichen ([\t\n\v\f\r ])
[[:upper:]] Großbuchstabe ([A-Z])
[[:word:]] Word-Zeichen ([0-9A-Za-z_])
[[:xdigit:]] Hex-Ziffer ([0-9A-Fa-f])

Leistung

Dieser Abschnitt enthält einige Anleitungen zur Geschwindigkeit und Ressourcennutzung von regex-Ausdrücken.

Unicode kann sich auf die Speicherauslastung und Suchgeschwindigkeit auswirken

KQL regex bietet erstklassige Unterstützung für Unicode. In vielen Fällen ist der zusätzliche Arbeitsspeicher, der erforderlich ist, um Unicode zu unterstützen, vernachlässigbar und wirkt sich in der Regel nicht auf die Suchgeschwindigkeit aus.

Im Folgenden finden Sie einige Beispiele für Unicode-Zeichenklassen, die sich auf die Speicherauslastung und suchgeschwindigkeit auswirken können:

  • Speicherauslastung: Die Auswirkungen von Unicode ergeben sich in erster Linie aus der Verwendung von Unicode-Zeichenklassen. Unicode-Zeichenklassen sind tendenziell größer. Beispielsweise entspricht die \w Zeichenklasse standardmäßig etwa 140.000 unterschiedliche Codepoints. Dies erfordert zusätzlichen Arbeitsspeicher und kann die Regex-Kompilierung verlangsamen. Wenn Ihre Anforderungen von ASCII erfüllt werden können, empfiehlt es sich, ASCII-Klassen anstelle von Unicode-Klassen zu verwenden. Die NUR-ASCII-Version kann \w auf mehrere Arten ausgedrückt werden, die alle gleichwertig sind.

    [0-9A-Za-z_]
    (?-u:\w)
    [[:word:]]
    [\w&&\p{ascii}]
    
  • Suchgeschwindigkeit: Unicode wird tendenziell ziemlich gut behandelt, auch wenn große Unicode-Zeichenklassen verwendet werden. Einige der schnelleren internen Regex-Engines können jedoch keine Unicode-fähige Wortbegrenzungs assertion verarbeiten. Wenn Sie also keine Unicode-fähigen Wortbegrenzungs assertionen benötigen, sollten (?-u:\b) Sie anstelle von \b. Die (?-u:\b) Verwendung einer ascii-only-Definition eines Wortzeichens, die die Suchgeschwindigkeit verbessern kann.

Literale können Suchvorgänge beschleunigen

KQL regex verfügt über eine starke Fähigkeit, Literale innerhalb eines Regex-Musters zu erkennen, wodurch Suchvorgänge erheblich beschleunigt werden können. Wenn möglich, können Literale in Ihr Muster die Suchleistung erheblich verbessern. Im regex \w+@\w+werden beispielsweise die ersten Vorkommen übereinstimmen @ , und dann wird eine umgekehrte Übereinstimmung durchgeführt \w+ , um die Anfangsposition zu finden.