Compartilhar via


Expressões regulares

Aplica-se a: SQL Server 2025 (17.x) Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azurebanco de dados SQL no Microsoft Fabric

Este artigo apresenta expressões regulares para o SQL Server.

Uma expressão regular, ou regex, é uma sequência de caracteres que define um padrão de pesquisa para texto. O Regex é comumente usado para uma variedade de tarefas, incluindo correspondência de padrões, validação de dados, transformação de dados e consulta. Ele oferece uma maneira flexível e eficiente de pesquisar, manipular e lidar com operações de dados complexas.

Note

Expressões regulares estão disponíveis na Instância Gerenciada de SQL do Azure com a política de atualização do SQL Server 2025 ou Always-up-to-date.

Essa implementação da expressão regular baseia-se na biblioteca de expressões regulares RE2. Para obter mais informações, visite a Sintaxe de Expressão Regular RE2.

Funções regex com suporte:

Function Description
REGEXP_LIKE Retorna um valor booliano que indica se a entrada de texto corresponde ao padrão regex.
REGEXP_REPLACE Retorna uma cadeia de caracteres de origem modificada substituída por uma cadeia de caracteres de substituição, na qual foi encontrada a ocorrência do padrão regex.
REGEXP_SUBSTR Extrai partes de uma cadeia de caracteres com base em um padrão de expressão regular.

Retorna a ocorrência N de uma subsequência que corresponde ao padrão regex.
REGEXP_INSTR Retorna a posição inicial ou final da subsequência correspondente, dependendo da opção fornecida.
REGEXP_COUNT Retorna uma contagem do número de vezes que o padrão regex ocorre em uma cadeia de caracteres.
REGEXP_MATCHES Retorna uma tabela de subsequências capturadas que correspondem um padrão de expressão regular a uma cadeia de caracteres. Se nenhuma correspondência for encontrada, a função não retornará nenhuma linha.
REGEXP_SPLIT_TO_TABLE Retorna uma tabela de cadeias de caracteres dividida, delimitada pelo padrão regex. Se não há correspondência com o padrão, a função retorna a cadeia de caracteres.

Expressões regulares podem ser compostas por caracteres literais e metacaractadores, que têm significados e funções especiais.

Uma expressão regular básica é um único caractere literal. Os caracteres correspondem a eles mesmos, exceto pelos metacaracteres. Metacaracters incluem *, +, , ?, (, )ou |. Para corresponder a um metacaracter, escape-o com uma barra invertida. Por exemplo, \* corresponde ao caractere literal asterisco (*).

Duas expressões regulares podem ser alteradas ou concatenadas para formar uma nova expressão regular: se e1 corresponder a s e e2 corresponder a t, então e1 | e2 corresponderá a s ou a t, e e1e2 corresponderá a st.

Os metacaracters *, +e ? são operadores de repetição: e1* corresponde a uma sequência de zero ou mais cadeias de caracteres (possivelmente diferentes), cada uma das quais corresponde a e1; e1 + corresponde a uma ou mais; e1? corresponde a zero ou um.

A precedência dos operadores, da associação mais fraca à mais forte, é a seguinte: - Alternação - Concatenação - Operadores de repetição

Parênteses explícitos podem ser usados para forçar diferentes significados, como em expressões aritméticas. Alguns exemplos: ab|cd é equivalente a (ab)|(cd) ; ab é equivalente a a(b).

Para obter mais informações sobre a sintaxe de expressão regular aceita pelo RE2, consulte
Sintaxe de expressão regular RE2. Esta página também lista algumas sintaxes aceitas pelo PCRE, Perl e Vim.

Caracteres de expressão regular aceitos

Expressões de caractere único

Variantes de expressões de caractere único Examples
qualquer caractere, possivelmente incluindo o de nova linha (s=true) .
classe de caracteres [xyz]
classe de caractere negada [^xyz]
Classes de caracteres Perl \d
classe de caractere Perl negada \D
Classes de caracteres ASCII [[:alpha:]]
classe de caractere ASCII negada [[:^alpha:]]
classe de caractere Unicode (nome de uma letra) \pN
classe de caractere Unicode \p{Greek}
classe de caractere Unicode negada (nome de uma letra) \PN
classe de caractere Unicode negada \P{Greek}
Compósitos Description
xy x seguido por y
x | y x ou y (prefira x)
Repetições Description
x* zero ou mais x, de preferência mais
x+ um ou mais x, dê preferência a mais
x? zero ou um x, prefira um
x{n,m} n ou n+1 ou... ou m x, prefira o maior valor
x{n,} n ou mais x, prefira o valor maior
x{n} exatamente n x
x*? zero ou mais x, preferencialmente menos
x+? um ou mais x, prefira menos
x?? zero ou um x, preferencialmente zero
x{n,m}? n ou n+1 ou... ou m x, prefira menos
x{n,}? n ou mais x, prefira menos
x{n}? exatamente n x

Note

Os formulários x{n,m}, x{n,} e x{n} rejeitam formulários que criam uma contagem de repetição mínima ou máxima acima de 1.000. Repetições ilimitadas não estão sujeitas a essa restrição.

Classes de caracteres Perl

A tabela a seguir lista as classes de caracteres Perl com suporte no momento.

Classes de caractere Perl (todas somente ASCII) Description
\d dígitos ( [0-9])
\D não são dígitos ( [^0-9])
\s espaço em branco ( [\t\n\f\r ])
\S não é espaço em branco ( [^\t\n\f\r ])
\w caracteres de palavra ( [0-9A-Za-z_])
\W caracteres não alfabéticos ( [^0-9A-Za-z_])

Classes de caractere ASCII

A tabela a seguir lista as classes de caracteres ASCII com suporte no momento.

Classes de caractere ASCII Description
[[:alnum:]] alfanumérico ( [0-9A-Za-z])
[[:alpha:]] alfabético ( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] em branco ( [\t ])
[[:cntrl:]] controle ( [\x00-\x1F\x7F])
[[:digit:]] dígitos ( [0-9])
[[:graph:]] gráfico ( [!-~] ou [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] minúscula ( [a-z])
[[:print:]] imprimível ( [ -~] ou [ [:graph:]])
[[:punct:]] pontuação ( [!-/:-@[-\``{-~])
[[:space:]] espaço em branco ( [\t\n\v\f\r ])
[[:upper:]] maiúscula ( [A-Z])
[[:word:]] caracteres de palavra ( [0-9A-Za-z_])
[[:xdigit:]] dígito hex ( [0-9A-Fa-f])

Caracteres literais

  • Letters
  • Numbers
  • Symbols

Cadeias de caracteres vazias

Cadeias de caracteres vazias Description
^ No início do texto ou da linha (m=true)
$ No final do texto (como \z, não \Z) ou linha (m=true)
\A No início do texto
\b No limite da palavra ASCII (\w de um lado e \W, \Aou \z do outro)
\B Fora do limite de palavra ASCII
\z Ao final do texto

Groupings

O grupo de captura (subexpressão) do padrão com:

Grouping Description
(re) Grupo de captura numerada (submatch)
(?P<name>re) Grupo de captura nomeado e numerado (subpartida)
(?:re) Grupo de não captura
(?<flags>) Definir <flags> dentro do grupo atual; sem captura
(?<flags>:re) Definir <flags> durante re; agrupamento sem captura

Flags

Use sinalizadores para modificar o comportamento da expressão. Por exemplo:

Flag Description
i Não diferencia maiúsculas de minúsculas (padrão false)
m Modo de várias linhas: ^ e $ correspondem ao início/fim de linha, além do início/fim de texto (padrão false)
s Permitir . correspondência \n (padrão false)
c Diferencia maiúsculas de minúsculas (padrão true)

Essa implementação dá suporte ao padrão POSIX de expressões regulares após RE2 e tem suporte para o sabor PCRE/PCRE2 da sintaxe de expressões regulares, que é compatível com a maioria das ferramentas e mecanismos de expressão regular modernos. Há diferentes tipos de expressões regulares, como POSIX, ANSI, Perl e PCRE, que têm sintaxe e recursos diferentes. Para obter mais informações sobre constructos e comportamentos com suporte do mecanismo regex subjacente, consulte RE2, uma biblioteca de expressões regulares.

Note

A correspondência de expressões regulares no SQL Server não respeita ordenações SQL para comparações linguísticas. Esse comportamento é intencional e consistente com a maioria dos mecanismos de expressões regulares, pois a correspondência é baseada nas propriedades padrão e de caracteres Unicode em vez de regras de ordenação. Como resultado, isso pode levar a diferenças de comportamento quando comparado a outras funções de comparação de cadeia de caracteres, como LIKE, especialmente em colunas indexadas com ordenações específicas de linguagem.

Requirements

  • Uma ferramenta de cliente SQL, como o Azure Data Studio, o SQL Server Management Studio ou o Visual Studio Code.
  • Um conhecimento básico da sintaxe do SQL e das consultas.
  • Uma compreensão básica da sintaxe de expressão regular e conceitos.

perguntas frequentes

Qual é o impacto no desempenho do uso do regex?

As consultas Regex podem ter um impacto no desempenho dependendo da complexidade do padrão regex, do tamanho dos dados de texto e do número de linhas envolvidas. Você pode usar o plano de execução e as estatísticas para monitorar e otimizar o desempenho de suas consultas regex.

Limitações

No momento, não há suporte para os seguintes itens:

  • Os tipos de dados LOB (varchar(max) ou nvarchar(max)) têm string_expressions suporte nas seguintes funções intrínsecas:
    • REGEXP_LIKE
    • REGEXP_COUNT
    • REGEXP_INSTR

No entanto, esse suporte é limitado a tamanhos de entrada de até 2 MB.

  • Não há suporte para tipos de dados LOB nas seguintes funções regex:

    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • Não há suporte para funções de expressão regular em procedimentos armazenados compilados nativamente.