Partilhar via


Expressões regulares

Aplica-se a: SQL Server 2025 (17.x) Azure SQL Database AzureSQL Managed InstanceSQL database in 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 consultas. Ele oferece uma maneira flexível e eficiente de pesquisar, manipular e lidar com operações de dados complexas.

Note

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

Esta implementação de expressão regular é baseada na biblioteca de expressões regulares RE2. Para obter mais informações, visite RE2 Regular Expression Syntax.

Funções regex suportadas:

Function Description
REGEXP_LIKE Retorna um valor booleano 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, onde a ocorrência do padrão regex foi encontrada.
REGEXP_SUBSTR Extrai partes de uma cadeia de caracteres com base em um padrão de expressão regular.

Retorna a Nona ocorrência de uma substring que corresponde ao padrão regex.
REGEXP_INSTR Retorna a posição inicial ou final da substring 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 substring(s) capturada(s) que correspondem a 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 divididas, delimitadas pelo padrão regex. Se não houver correspondência com o padrão, a função retornará a cadeia de caracteres.

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

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

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

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

A precedência do operador, da ligação mais fraca para a mais forte, é a seguinte: - Alternância - 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 por RE2, consulte
RE2 Sintaxe de Expressão Regular. Esta página também lista algumas sintaxe aceitas por PCRE, Perl e Vim.

Caracteres de expressão regular aceitos

Expressões de caractere único

Tipos de expressões de caractere único Examples
qualquer carácter, possivelmente incluindo nova linha (s=true) .
character class [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 de 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, recomenda-se optar por mais
x? zero ou um x, prefira um
x{n,m} n ou n+1 ou ... ou m x, escolha preferencialmente mais
x{n,} n ou mais x, prefira mais
x{n} exatamente n x
x*? zero ou mais x, preferir o menor número possível
x+? um ou mais x, prefira menos
x?? zero ou um x, prefira 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 formas de contagem x{n,m}, x{n,} e x{n} rejeitam formas que criam uma contagem de repetição mínima ou máxima acima de 1.000. As repetições ilimitadas não estão sujeitas a esta restrição.

Classes de caracteres Perl

A tabela a seguir lista as classes de caracteres Perl atualmente suportadas.

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

Classes de caracteres ASCII

A tabela a seguir lista as classes de caracteres ASCII atualmente suportadas.

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

Caracteres literais

  • Letters
  • Numbers
  • Symbols

Strings vazias

Strings 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, \A ou \z do outro)
\B Não no limite de palavras ASCII
\z No final do texto

Groupings

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

Grouping Description
(re) Grupo de captura numerado (subcorrespondência)
(?P<name>re) Grupo de captura nomeado e numerado (subconjunto)
(?:re) Grupo não capturador
(?<flags>) Definido <flags> dentro do grupo atual; não capturador
(?<flags>:re) Definir <flags> durante re; grupo não capturante

Flags

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

Flag Description
i Não distingue maiúsculas de minúsculas (padrão false)
m Modo multi-linha: ^ e $ correspondem ao início/fim de linha, além do início/fim de texto (padrão false)
s Deixar . corresponder \n (padrão false)
c Sensível a maiúsculas e minúsculas (padrão true)

Esta implementação suporta o padrão POSIX para expressões regulares seguindo o RE2 e tem suporte para a variante PCRE/PCRE2 da sintaxe de expressões regulares, que é compatível com a maioria dos motores e ferramentas de expressão regular modernos. Existem diferentes sabores de expressões regulares, como POSIX, ANSI, Perl e PCRE, que têm sintaxe e características diferentes. Para obter mais informações sobre construções suportadas e comportamento 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 agrupamentos SQL para comparações linguísticas. Esse comportamento é intencional e consistente com a maioria dos mecanismos de expressão regular, pois a correspondência é feita com base no padrão e nas propriedades de caracteres Unicode, e não em regras de ordenação. Como resultado, isso pode levar a diferenças no comportamento quando comparado a outras funções de comparação de cadeia de caracteres como LIKE, especialmente em colunas indexadas com agrupamentos específicos de idioma.

Requirements

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

FAQ

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

Os seguintes itens não são atualmente suportados:

  • Os tipos de dados LOB (varchar(max) ou nvarchar(max)) são suportados string_expressions 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.

  • Os tipos de dados LOB não são suportados nas seguintes funções regulares:

    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • As funções de expressão regular não são suportadas em procedimentos armazenados compilados nativamente.