Categorias:

Funções de cadeia de caracteres (expressões regulares)

REGEXP_REPLACE

Retorna a entidade com o padrão especificado (ou todas as ocorrências do padrão), seja removida ou substituída por uma cadeia de caracteres substituta. Se não for encontrada nenhuma correspondência, retorna a entidade original.

Consulte também Funções de cadeia de caracteres (expressões regulares).

Sintaxe

REGEXP_REPLACE( <subject> , <pattern> [ , <replacement> , <position> , <occurrence> , <parameters> ] )
Copy

Argumentos

Obrigatório:

subject

Sujeito à correspondência.

pattern

Padrão a atender.

Opcional:

replacement

Cadeia de caracteres que substitui as subcadeias de caracteres combinadas pelo padrão. Se uma cadeia de caracteres vazia for especificada, a função remove todos os padrões correspondentes e retorna a cadeia de caracteres resultante.

Padrão: '' (cadeia de caracteres vazia).

position

Número de caracteres desde o início da cadeia de caracteres onde a função começa a procurar correspondências.

Padrão: 1 (a busca por uma correspondência começa no primeiro caractere à esquerda)

occurrence

Especifica a ocorrência do padrão a ser substituído. Se 0 for especificado, todas as ocorrências são substituídas.

Padrão: 0 (todas as ocorrências)

parameters

Cadeia de caracteres de um ou mais caracteres que especifica os parâmetros usados para a busca de correspondências. Valores com suporte:

c , i , m , e , s

Para obter mais detalhes, consulte parâmetros de expressão regular.

Padrão: c

Notas de uso

  • A cadeia de caracteres de substituição pode conter referências inversas para capturar grupos (ou seja, subexpressões do padrão). Um grupo de captura é uma expressão regular que se encontra entre parênteses (( )). O número máximo de grupos de captura é 9.

    As referências anteriores correspondem a expressões dentro de um grupo de captura. As referências inversas tem a forma n onde n é um valor de 0 a 9, inclusive, que se refere à instância correspondente do grupo de captura. Para obter mais detalhes, consulte Exemplos (neste tópico).

  • Os parênteses (( )) e colchetes ([ ]) atualmente devem ser em forma de parênteses duplos para serem analisados como cadeias de caracteres literais.

    O exemplo abaixo mostra como remover parênteses:

    SELECT REGEXP_REPLACE('Customers - (NY)','\\(|\\)','') AS customers;
    
    +----------------+
    | CUSTOMERS      |
    |----------------|
    | Customers - NY |
    +----------------+
    
    Copy
  • Para notas adicionais de uso, consulte Notas de uso geral para funções de expressão regular.

Detalhes do agrupamento

Arguments with collation specifications are currently not supported.

Exemplos

O exemplo a seguir substitui todos os espaços na cadeia de caracteres por nada (ou seja, todos os espaços são removidos):

select regexp_replace('It was the best of times, it was the worst of times', '( ){1,}','') as "result" from dual;

+------------------------------------------+
| result                                   |
|------------------------------------------|
| Itwasthebestoftimes,itwastheworstoftimes |
+------------------------------------------+
Copy

O exemplo a seguir corresponde à cadeia de caracteres times e a substitui pela cadeia de caracteres days. A correspondência começa no primeiro caractere na cadeia de caracteres e substitui a segunda ocorrência da subcadeia de caracteres:

select regexp_replace('It was the best of times, it was the worst of times', 'times','days',1,2) as "result" from dual;

+----------------------------------------------------+
| result                                             |
|----------------------------------------------------|
| It was the best of times, it was the worst of days |
+----------------------------------------------------+
Copy

O exemplo a seguir usa referências anteriores para reorganizar a cadeia de caracteres firstname middlename lastname como lastname, firstname middlename e inserir uma vírgula entre lastname e firstname:

select regexp_replace('firstname middlename lastname','(.*) (.*) (.*)','\\3, \\1 \\2') as "name sort" from dual;

+---------------------------------------------------------------------------------+
| REGEXP_REPLACE('FIRSTNAME MIDDLENAME LASTNAME','(.*) (.*) (.*)','\\3, \\1 \\2') |
|---------------------------------------------------------------------------------|
| lastname, firstname middlename                                                  |
+---------------------------------------------------------------------------------+
Copy