Saiba como a transformação de dados do SLS lida com correspondência de expressões regulares, escape de caracteres e agrupamento.
Correspondência completa
A correspondência completa exige que a expressão regular corresponda a toda a string. Por exemplo, \d+ corresponde completamente à string 1234.
Algumas funções aceitam correspondências parciais. Para impor uma correspondência completa, adicione ^ no início e $ no final. Exemplo: ^expressão regular$. A sintaxe completa de regex está documentada na referência Operações de expressão regular do Python.
A tabela a seguir mostra o modo de correspondência de cada função.
|
Categoria |
Função |
Modo de correspondência |
|
Funções de operação global |
Correspondência parcial |
|
|
Correspondência completa |
||
|
Correspondência completa |
||
|
Correspondência completa |
||
|
Correspondência parcial |
||
|
Funções de expressão |
Controlado por parâmetro. Padrão: correspondência completa. |
|
|
Correspondência parcial |
||
|
Correspondência parcial |
||
|
Correspondência parcial |
||
|
Controlado por parâmetro. Padrão: correspondência parcial. |
||
|
Correspondência parcial |
||
|
Correspondência parcial |
Exemplos de modos de correspondência:
regex_match("abc123", r"\d+"): Há correspondência (parcial por padrão).regex_match("abc123", r"\d+", full=True): Sem correspondência (correspondência completa ativada).regex_match("abc123", r"^\d+$"): Sem correspondência. Equivale ao modo de correspondência completa.e_search(r'status~="\d+"'): Corresponde ao valor do campo status. Equivale ao modo de correspondência parcial.e_search(r'status~="^\d+$"'): Corresponde ao valor do campo status. Equivale ao modo de correspondência completa.
Escape de caracteres
Expressões regulares contêm caracteres especiais. Para correspondê-los literalmente, use um dos métodos de escape abaixo:
-
Use uma barra invertida (\) para fazer o escape.
O tópico Escape de caracteres aborda a sintaxe completa.
-
Use a função
str_regex_escape.Por exemplo,
e_drop_fields(str_regex_escape("abc.test"))remove o campo abc.test.Já
e_drop_fields("abc.test")remove campos correspondentes a abc?test, em que o ponto de interrogação (?) representa qualquer caractere único.
Agrupamento
Os parênteses () agrupam expressões para repetição ou retroreferência. O exemplo a seguir ilustra a diferença:
"""
Log before processing:
SourceIP: 192.0.2.1
Log after processing:
SourceIP: 192.0.2.1
ip: 192.0.2.1
"""
# No group:
e_regex("SourceIP",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")
# With group:
e_regex("SourceIP", "\d{1,3}(.\d{1,3}){3}", "ip")
Grupos de captura
Um grupo de captura armazena a correspondência para uso posterior em retroreferências. Qualquer grupo cujos parênteses () não comecem com ?: é considerado um grupo de captura.
A numeração dos grupos de captura começa em 1, da esquerda para a direita, conforme a posição do parêntese de abertura. A expressão abaixo, por exemplo, possui três grupos:
(\d{4})-(\d{2}-(\d{2}))
1 1 2 3 32
Quando uma regex contém grupos de captura padrão e nomeados, os grupos padrão são numerados primeiro, seguidos pelos nomeados. O SLS permite referenciar grupos nomeados diretamente pelo nome em expressões ou programas.
Grupos sem captura
Um grupo sem captura não armazena a correspondência. Grupos cujos parênteses () começam com ?: são classificados como sem captura.
Para corresponder a program ou project, use pro(gram|ject). Caso não seja necessário armazenar a correspondência em cache, prefira a forma sem captura pro(?:gram|ject).
A construção (?:x) corresponde a x sem armazenar o resultado em cache, permitindo definir subexpressões para uso com operadores de regex.