Compartir vía


Sintaxis regex

Se aplica a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

En este artículo se proporciona información general sobre la sintaxis de expresiones regulares compatibles con Lenguaje de consulta Kusto (KQL).

Hay una serie de operadores y funciones de KQL que realizan la coincidencia de cadenas, la selección y la extracción con expresiones regulares, como matches regex, parsey replace_regex().

En KQL, las expresiones regulares deben codificarse como literales de cadena y seguir las reglas de comillas de cadena. Por ejemplo, la expresión \A regular se representa en KQL como "\\A". La barra diagonal inversa adicional indica que la otra barra diagonal inversa forma parte de la expresión \Aregular .

Sintaxis

En las secciones siguientes se documenta la sintaxis de expresión regular compatible con Kusto.

Coincidir con un carácter

Patrón Descripción
. Cualquier carácter excepto nueva línea (incluye nueva línea con la marca s)
[0-9] Cualquier dígito ASCII
\d Dígito (\p{Nd})
\D No un dígito
\pX Clase de caracteres Unicode identificada por un nombre de letra
\p{Greek} Clase de caracteres Unicode (categoría general o script)
\PX Clase de caracteres Unicode negada identificada por un nombre de una letra
\P{Greek} Clase de caracteres Unicode negada (categoría general o script)

Clase de caracteres

Patrón Descripción
[xyz] Clase de caracteres que coincide con x, y o z (unión).
[^xyz] Clase de caracteres que coincida con cualquier carácter excepto x, y y z.
[a-z] Clase de caracteres que coincide con cualquier carácter en el rango a-z.
[[:alpha:]] Clase de caracteres ASCII ([A-Za-z])
[[:^alpha:]] Clase de caracteres ASCII negada ([^A-Za-z])
[x[^xyz]] Clase de caracteres anidada/agrupación (que coincida con cualquier carácter excepto y y z)
[a-y&&xyz] Intersección (coincidencia de x o y)
[0-9&&[^4]] Resta mediante intersección y negación (coincidencia entre 0 y 9 excepto 4)
[0-9--4] Resta directa (coincidencia entre 0 y 9 excepto 4)
[a-g~~b-h] Diferencia simétrica (coincidencia a y h solo)
[\[\]] Escape en clases de caracteres (coincidentes [ o ])
[a&&b] La clase de caracteres vacía no coincide con nada

Nota:

Cualquier clase de caracteres con nombre puede aparecer dentro de una clase de caracteres entre corchetes [...] . Por ejemplo, [\p{Greek}[:digit:]] coincide con cualquier dígito ASCII o cualquier punto de código en el Greek script. [\p{Greek}&&\pL] coincide con las letras griegas.

La precedencia en las clases de caracteres es de la mayoría del enlace al enlace mínimo:

  1. Gamas: [a-cd] == [[a-c]d]
  2. Unión: [ab&&bc] == [[ab]&&[bc]]
  3. Intersección, diferencia, diferencia simétrica: todos tienen prioridad equivalente y se evalúan de izquierda a derecha. Por ejemplo, [\pL--\p{Greek}&&\p{Uppercase}] == [[\pL--\p{Greek}]&&\p{Uppercase}].
  4. Negación: [^a-z&&b] == [^[a-z&&b]].

Compuestos

Patrón Descripción
xy Concatenación (x seguido de y)
x\|y Alternancia (x o y , prefiere x)

Repeticiones

Patrón Descripción
x* Cero o más de x (expanso)
x+ Uno o más de x (expanso)
x? Cero o uno de x (expanso)
x*? Cero o más de x (sin formato/diferido)
x+? Uno o más de x (sin formato/diferido)
x?? Cero o uno de x (sin formato/diferido)
x{n,m} Al menos n x y como máximo m x (expanso)
x{n,} Al menos n x (expanso)
x{n} Exactamente n x
x{n,m}? Al menos n x y como máximo m x (sin formato/diferido)
x{n,}? Al menos n x (sin formato/diferido)
x{n}? Exactamente n x

Coincidencias vacías

Patrón Descripción
^ Comienzo de un pajar (o inicio de línea con modo de varias líneas)
$ Final de un pajar (o final de línea con modo de varias líneas)
\A Solo el principio de un pajar (incluso con el modo de varias líneas habilitado)
\z Solo el final de un pajar (incluso con el modo de varias líneas habilitado)
\b Límite de palabra Unicode (\w en un lado y \W, \Ao \z en otro)
\B No un límite de palabra Unicode
\b{start}, \< Límite de inicio de palabra unicode (\W\|\A a la izquierda, \w a la derecha)
\b{end}, \> Límite de fin de palabra Unicode (\w a la izquierda, \W\|\z a la derecha)
\b{start-half} Mitad de un límite de inicio de palabra Unicode (\W\|\A a la izquierda)
\b{end-half} Mitad de un límite de fin de palabra Unicode (\W\|\z a la derecha)

Agrupación y marcas

Patrón Descripción
(exp) Grupo de captura numerado (indexado abriendo paréntesis)
(?P<name>exp) Grupo de captura con nombre (también numerado) (los nombres deben ser alfanuméricos)
(?<name>exp) Grupo de captura con nombre (también numerado) (los nombres deben ser alfanuméricos)
(?:exp) Grupo que no es de captura
(?flags) Establecimiento de marcas en el grupo actual
(?flags:exp) Establecer marcas para exp (sin captura)

Los nombres de grupo de captura solo pueden contener puntos de código Unicode alfanuméricos, puntos, caracteres ._de subrayado y corchetes[ y ]. Los nombres deben comenzar con un _ punto de código alfabético o alfabético. Los puntos de código alfabéticos corresponden a la Alphabetic propiedad Unicode, mientras que los puntos de código numéricos corresponden a la unión de las Decimal_Numbercategorías , Letter_Number y Other_Number generales.

Las marcas son caracteres únicos. Por ejemplo, (?x) establece la marca x y (?-x) borra la marca x. Se pueden establecer o borrar varias marcas al mismo tiempo: (?xy) establece las x marcas y y y (?x-y) establece la x marca y borra la y marca. De forma predeterminada, todas las marcas están deshabilitadas a menos que se indique lo contrario. Son las siguientes:

Marca Descripción
i No distingue mayúsculas y minúsculas: las letras coinciden con mayúsculas y minúsculas.
m Modo de varias líneas: ^ y $ coinciden con el principio y el final de la línea
s Permitir punto (.). para que coincida \n
R Habilita el modo CRLF: cuando está habilitado el modo de varias líneas, \r\n se usa
U Intercambiar el significado de x* y x*?
u Compatibilidad con Unicode (habilitada de forma predeterminada)
x Modo detallado, omite el espacio en blanco y permite comentarios de línea (empezando por #)

Tenga en cuenta que, en modo detallado, el espacio en blanco se omite en todas partes, incluidas las clases de caracteres. Para insertar espacios en blanco, use su forma de escape o un literal hexadecimal. Por ejemplo, \ o \x20 para un espacio ASCII.

Nota:

  • Las marcas se pueden alternar dentro de un patrón. Por ejemplo, la sintaxis siguiente usa una coincidencia que no distingue mayúsculas de minúsculas para la primera parte y una coincidencia que distingue mayúsculas de minúsculas para la segunda parte: (?i)a+(?-i)b+.
  • a+ coincide con o a A, pero el b+ único coincide con b.
  • El modo de varias líneas significa ^ y $ ya no coincide solo al principio o al final de la entrada, sino también al principio o al final de las líneas. Tenga en cuenta que ^ coincide después de nuevas líneas, incluso al final de la entrada.
  • Cuando el modo CRLF y el modo de varias líneas están habilitados, ^ y $ coinciden con \r y \n, pero nunca en medio de .\r\n
  • El modo Unicode también se puede deshabilitar de forma selectiva, aunque solo cuando el resultado no coincida con UTF-8 no válido. Por ejemplo, el uso de un límite de palabra ASCII en lugar de un límite de palabra Unicode podría hacer que algunas búsquedas de expresiones regulares se ejecuten más rápido: (?-u:\b).+(?-u:\b) para que coincidan $$abc$$con .

Secuencias de escape

Patrón Descripción
\* Literal *, se aplica a todos los ASCII, excepto [0-9A-Za-z<>]
\a Campana (\x07)
\f Fuente de formularios (\x0C)
\t Tabulación horizontal
\n Nueva línea
\r Retorno de carro
\v Pestaña Vertical (\x0B)
\A Coincide al principio de un pajar
\z Coincide al final de un pajar
\b Aserción de límites de Word
\B Aserción de límite de palabra negada
\b{start}, \< Aserción de límite de inicio de palabra
\b{end}, \> Aserción de límite de fin de palabra
\b{start-half} Mitad de una aserción de límite inicial de palabra
\b{end-half} Mitad de una aserción de límite de fin de palabra
\123 Código de caracteres octales, hasta tres dígitos
\x7F Código de carácter hexadecimal (exactamente dos dígitos)
\x{10FFFF} Código de carácter hexadecimal correspondiente a un punto de código Unicode
\u007F Código de carácter hexadecimal (exactamente cuatro dígitos)
\u{7F} Código de carácter hexadecimal correspondiente a un punto de código Unicode
\U0000007F Código de carácter hexadecimal (exactamente ocho dígitos)
\U{7F} Código de carácter hexadecimal correspondiente a un punto de código Unicode
\p{Letter} clase de caracteres Unicode
\P{Letter} Clase de caracteres Unicode negada
\d, , \s, \w clase de caracteres de Perl
\D, , \S, \W Clase de caracteres Perl negada

Clases de caracteres perl (compatibles con Unicode)

Estas clases se basan en las definiciones proporcionadas en UTS#18:

Patrón Descripción
\d Ddigit (\p{Nd})
\D No dígito
\s Espacio en blanco (\p{White_Space})
\S No espacios en blanco
\w Carácter de palabra (\p{Alphabetic}\d + \p{Pc}\p{M}\p{Join_Control} + + + )
\W Sin carácter de palabra

Clases de caracteres ASCII

Estas clases se basan en las definiciones proporcionadas en UTS#18:

Patrón Descripción
[[:alnum:]] Alfanumérico ([0-9A-Za-z])
[[:alpha:]] Alfabético ([A-Za-z])
[[:ascii:]] ASCII ([\x00-\x7F])
[[:blank:]] En blanco ([\t ])
[[:cntrl:]] Control ([\x00-\x1F\x7F])
[[:digit:]] Dígitos ([0-9])
[[:graph:]] Gráfico ([!-~])
[[:lower:]] Minúsculas ([a-z])
[[:print:]] Imprimible ([ -~])
[[:punct:]] Puntuación ([!-/:-@\[-`{-~])
[[:space:]] Espacio en blanco ([\t\n\v\f\r ])
[[:upper:]] Mayúsculas ([A-Z])
[[:word:]] Caracteres de palabra ([0-9A-Za-z_])
[[:xdigit:]] Dígito hexadecimal ([0-9A-Fa-f])

Rendimiento

En esta sección se proporcionan algunas instrucciones sobre la velocidad y el uso de recursos de las expresiones regex.

Unicode puede afectar al uso de memoria y a la velocidad de búsqueda

KQL regex proporciona compatibilidad de primera clase con Unicode. En muchos casos, la memoria adicional necesaria para admitir Unicode es insignificante y normalmente no afectará a la velocidad de búsqueda.

A continuación se muestran algunos ejemplos de clases de caracteres Unicode que pueden afectar al uso de memoria y a la velocidad de búsqueda:

  • Uso de memoria: el impacto de Unicode surge principalmente del uso de clases de caracteres Unicode. Las clases de caracteres Unicode tienden a tener un tamaño mayor. Por ejemplo, la \w clase de caracteres coincide con alrededor de 140 000 puntos de código distintos de forma predeterminada. Esto requiere memoria adicional y puede ralentizar la compilación de expresiones regulares. Si los requisitos pueden cumplirse mediante ASCII, se recomienda usar clases ASCII en lugar de clases Unicode. La versión de solo ASCII de \w se puede expresar de varias maneras, todas ellas equivalentes.

    [0-9A-Za-z_]
    (?-u:\w)
    [[:word:]]
    [\w&&\p{ascii}]
    
  • Velocidad de búsqueda: Unicode tiende a controlarse bastante bien, incluso cuando se usan clases de caracteres Unicode grandes. Sin embargo, algunos de los motores de regex internos más rápidos no pueden controlar una aserción de límite de palabras compatible con Unicode. Por lo tanto, si no necesita aserciones de límite de palabras compatibles con Unicode, puede considerar la posibilidad de usar (?-u:\b) en lugar de \b. (?-u:\b) utiliza una definición de solo ASCII de un carácter de palabra, que puede mejorar la velocidad de búsqueda.

Los literales pueden acelerar las búsquedas

KQL regex tiene una gran capacidad de reconocer literales dentro de un patrón regex, lo que puede acelerar significativamente las búsquedas. Si es posible, incluir literales en el patrón puede mejorar considerablemente el rendimiento de la búsqueda. Por ejemplo, en la expresión regular \w+@\w+, las primeras apariciones de @ se coinciden y, a continuación, se realiza una coincidencia inversa para \w+ buscar la posición inicial.