Sintaxis regex
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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
, parse
y 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 \A
regular .
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:
- Gamas:
[a-cd]
==[[a-c]d]
- Unión:
[ab&&bc]
==[[ab]&&[bc]]
- 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}]
. - 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 , \A o \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_Number
categorí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 oa
A
, pero elb+
único coincide conb
.- 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.