Regex-Syntax
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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. , parse
und 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 \A
ist.
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:
- Schussbereiche:
[a-cd]
==[[a-c]d]
- Vereinigung:
[ab&&bc]
==[[ab]&&[bc]]
- 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}]
. - 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 , \A oder \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_Number
Kategorien 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 entwedera
oderA
, aber dieb+
einzigen Übereinstimmungenb
.- 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.