REGEXP_REPLACE¶
Retorna a entidade com o padrão especificado (ou todas as ocorrências do padrão) removido ou substituído por uma cadeia de caracteres de substituição.
Sintaxe¶
REGEXP_REPLACE( <subject> , <pattern> [ , <replacement> [ , <position> [ , <occurrence> [ , <parameters> ] ] ] ] ) Argumentos¶
Obrigatório:
subjectA cadeia de caracteres a ser procurada por correspondências.
patternPadrão a atender.
Para diretrizes sobre como especificar padrões, consulte Funções de cadeia de caracteres (expressões regulares).
Opcional:
replacementCadeia 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).positionNúmero de caracteres a partir do início da cadeia de caracteres onde a função inicia a busca por correspondências. O valor deve ser um número inteiro positivo.
Padrão:
1(a busca por uma correspondência começa no primeiro caractere à esquerda)occurrenceEspecifica a ocorrência do padrão a ser substituído. Se
0for especificado, todas as ocorrências são substituídas.Padrão:
0(todas as ocorrências)parametersCadeia de caracteres de um ou mais caracteres que especifica os parâmetros usados para a busca de correspondências. Valores com suporte:
Parâmetro
Descrição
cCorrespondência com distinção entre maiúsculas e minúsculas
iCorrespondência sem distinção entre maiúsculas e minúsculas
mModo multilinha
eExtração de subcorrespondências
sO caractere curinga POSIX do modo de linha única
.corresponde a\nPadrão:
cPara obter mais informações, consulte Especificação dos parâmetros para a expressão regular.
Retornos¶
Retorna um valor do tipo VARCHAR.
Se não for encontrada nenhuma correspondência, retorna a entidade original.
Retorna NULL se algum argumento for NULL.
Notas de uso¶
A cadeia de caracteres de substituição pode conter referências retroativas para grupos de captura; por exemplo, 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 é nove.As referências anteriores correspondem a expressões dentro de um grupo de captura. As referências inversas tem a forma
nondené um valor de 0 a 9, inclusive, que se refere à instância correspondente do grupo de captura. Para mais informações, 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 | +----------------+
Para notas adicionais de uso, consulte Notas de uso geral para funções de expressão regular.
Detalhes do agrupamento¶
Arguments with collation specifications currently aren’t 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; +------------------------------------------+ | RESULT | |------------------------------------------| | Itwasthebestoftimes,itwastheworstoftimes | +------------------------------------------+ 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 da cadeia de caracteres e substitui a segunda ocorrência da substring:
SELECT REGEXP_REPLACE('It was the best of times, it was the worst of times', 'times', 'days', 1, 2) AS result; +----------------------------------------------------+ | RESULT | |----------------------------------------------------| | It was the best of times, it was the worst of days | +----------------------------------------------------+ 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; +--------------------------------+ | NAME_SORT | |--------------------------------| | lastname, firstname middlename | +--------------------------------+ Os exemplos restantes usam os dados na seguinte tabela:
CREATE OR REPLACE TABLE regexp_replace_demo(body VARCHAR(255)); INSERT INTO regexp_replace_demo values ('Hellooo World'), ('How are you doing today?'), ('the quick brown fox jumps over the lazy dog'), ('PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS'); O exemplo a seguir insere o caractere * entre todos os caracteres do sujeito, incluindo o início e o fim, usando um grupo vazio (()), que encontra uma correspondência entre quaisquer dois caracteres:
SELECT body, REGEXP_REPLACE(body, '()', '*') AS replaced FROM regexp_replace_demo; +---------------------------------------------+-----------------------------------------------------------------------------------------+ | BODY | REPLACED | |---------------------------------------------+-----------------------------------------------------------------------------------------| | Hellooo World | *H*e*l*l*o*o*o* *W*o*r*l*d* | | How are you doing today? | *H*o*w* *a*r*e* *y*o*u* *d*o*i*n*g* *t*o*d*a*y*?* | | the quick brown fox jumps over the lazy dog | *t*h*e* *q*u*i*c*k* *b*r*o*w*n* *f*o*x* *j*u*m*p*s* *o*v*e*r* *t*h*e* *l*a*z*y* *d*o*g* | | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | *P*A*C*K* *M*Y* *B*O*X* *W*I*T*H* *F*I*V*E* *D*O*Z*E*N* *L*I*Q*U*O*R* *J*U*G*S* | +---------------------------------------------+-----------------------------------------------------------------------------------------+ O exemplo a seguir remove todas as vogais, substituindo-as por nada, independentemente da ordem ou caso:
SELECT body, REGEXP_REPLACE(body, '[aeiou]', '', 1, 0, 'i') AS replaced FROM regexp_replace_demo; +---------------------------------------------+----------------------------------+ | BODY | REPLACED | |---------------------------------------------+----------------------------------| | Hellooo World | Hll Wrld | | How are you doing today? | Hw r y dng tdy? | | the quick brown fox jumps over the lazy dog | th qck brwn fx jmps vr th lzy dg | | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | PCK MY BX WTH FV DZN LQR JGS | +---------------------------------------------+----------------------------------+ O exemplo a seguir remove todas as palavras que contêm a letra minúscula o da entidade, correspondendo a um limite de palavra (\b), seguido por zero ou mais caracteres de palavra (\S), a letra o e, em seguida, zero ou mais caracteres de palavra até o próximo limite de palavra:
SELECT body, REGEXP_REPLACE(body, '\\b(\\S*)o(\\S*)\\b') AS replaced FROM regexp_replace_demo; +---------------------------------------------+-----------------------------------------+ | BODY | REPLACED | |---------------------------------------------+-----------------------------------------| | Hellooo World | | | How are you doing today? | are ? | | the quick brown fox jumps over the lazy dog | the quick jumps the lazy | | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | +---------------------------------------------+-----------------------------------------+ O exemplo a seguir substitui todas as palavras que contêm a letra minúscula o, trocando as letras antes e depois da primeira ocorrência de o e substituindo o pela sequência de caracteres @@:
SELECT body, REGEXP_REPLACE(body, '\\b(\\S*)o(\\S*)\\b', '\\2@@\\1') AS replaced FROM regexp_replace_demo; +---------------------------------------------+-------------------------------------------------+ | BODY | REPLACED | |---------------------------------------------+-------------------------------------------------| | Hellooo World | @@Helloo rld@@W | | How are you doing today? | w@@H are u@@y ing@@d day@@t? | | the quick brown fox jumps over the lazy dog | the quick wn@@br x@@f jumps ver@@ the lazy g@@d | | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | +---------------------------------------------+-------------------------------------------------+ O exemplo a seguir é igual ao anterior, mas a substituição começa na posição 3 da entidade:
SELECT body, REGEXP_REPLACE(body, '\\b(\\S*)o(\\S*)\\b', '\\2@@\\1', 3) AS replaced FROM regexp_replace_demo; +---------------------------------------------+-------------------------------------------------+ | BODY | REPLACED | |---------------------------------------------+-------------------------------------------------| | Hellooo World | He@@lloo rld@@W | | How are you doing today? | How are u@@y ing@@d day@@t? | | the quick brown fox jumps over the lazy dog | the quick wn@@br x@@f jumps ver@@ the lazy g@@d | | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | +---------------------------------------------+-------------------------------------------------+ O exemplo a seguir é igual ao anterior, mas apenas a terceira ocorrência é substituída, começando na posição 3 da entidade:
SELECT body, REGEXP_REPLACE(body, '\\b(\\S*)o(\\S*)\\b', '\\2@@\\1', 3, 3) AS replaced FROM regexp_replace_demo; +---------------------------------------------+----------------------------------------------+ | BODY | REPLACED | |---------------------------------------------+----------------------------------------------| | Hellooo World | Hellooo World | | How are you doing today? | How are you doing day@@t? | | the quick brown fox jumps over the lazy dog | the quick brown fox jumps ver@@ the lazy dog | | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | +---------------------------------------------+----------------------------------------------+ O exemplo a seguir é igual ao anterior, mas utiliza correspondência sem diferenciação de maiúsculas e minúsculas:
SELECT body, REGEXP_REPLACE(body, '\\b(\\S*)o(\\S*)\\b', '\\2@@\\1', 3, 3, 'i') AS replaced FROM regexp_replace_demo; +---------------------------------------------+----------------------------------------------+ | BODY | REPLACED | |---------------------------------------------+----------------------------------------------| | Hellooo World | Hellooo World | | How are you doing today? | How are you doing day@@t? | | the quick brown fox jumps over the lazy dog | the quick brown fox jumps ver@@ the lazy dog | | PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | PACK MY BOX WITH FIVE DOZEN R@@LIQU JUGS | +---------------------------------------------+----------------------------------------------+