Función REGEXP_REPLACE - Amazon Redshift

Función REGEXP_REPLACE

Busca una cadena para un patrón de expresión regular y reemplaza cada coincidencia del patrón con una cadena especificada. REGEXP_REPLACE es similar a Función REPLACE, pero le permite buscar un patrón de expresión regular en una cadena. Para obtener más información sobre las expresiones regulares, consulte Operadores POSIX y Expresión regular en la Wikipedia.

REGEXP_REPLACE es similar a Función TRANSLATE y a Función REPLACE, salvo que TRANSLATE realiza varias sustituciones de caracteres únicos y REPLACE sustituye una cadena entera por otra cadena, mientras que REGEXP_REPLACE le permite buscar un patrón de expresión regular en una cadena.

Sintaxis

REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )

Argumentos

source_string

Una expresión de cadena CHAR o VARCHAR, como un nombre de columna, que se buscará.

pattern

Un literal de cadena UTF-8 que representa un patrón de expresión regular. Para obtener más información, consulte Operadores POSIX.

replace_string

(Opcional) Una expresión de cadena CHAR o VARCHAR, como un nombre de columna, que reemplazará cada coincidencia del patrón. El valor predeterminado es una cadena vacía ( "" ).

position

(Opcional) Valor entero positivo que indica la posición dentro de source_string para comenzar la búsqueda. La posición se basa en la cantidad de caracteres, no bytes, por lo que los caracteres multibyte se cuentan como caracteres simples. El valor predeterminado es 1. Si el valor de posición es menor que 1, la búsqueda comienza en el primer carácter de source_string. Si el valor de position (posición) es mayor que la cantidad de caracteres de source-string (cadena_de_origen), el resultado es source_string (cadena_de_origen).

parameters

(Opcional) Uno o varios literales de cadena que indican el grado de coincidencia de la función con el patrón. Los valores posibles son los siguientes:

  • c: aplica la coincidencia que distingue entre mayúsculas y minúsculas. El comportamiento predeterminado es utilizar la coincidencia que distingue entre mayúsculas y minúsculas.

  • i: aplica la coincidencia que no distingue entre mayúsculas y minúsculas.

  • p: interpreta el patrón con el dialecto de expresión regular compatible con Perl (PCRE). Para obtener más información sobre PCRE, consulte Perl Compatible Regular Expressions en la Wikipedia.

Tipo de retorno

VARCHAR

Si patrón o replace_string es NULL, la función devuelve NULL.

Ejemplos

Para reemplazar todas las veces que aparece la cadena FOX en el valor quick brown fox, con una coincidencia que no distingue entre mayúsculas y minúsculas, use el siguiente ejemplo.

SELECT REGEXP_REPLACE('the fox', 'FOX', 'quick brown fox', 1, 'i'); +---------------------+ | regexp_replace | +---------------------+ | the quick brown fox | +---------------------+

En el siguiente ejemplo, se utiliza un patrón escrito en el dialecto de PCRE para localizar palabras que contengan al menos un número y una letra en minúsculas. Se utiliza el operador ?=, que tiene una connotación específica de anticipación en PCRE. Para sustituir cada palabra que reúne esas características con el valor [hidden], use el siguiente ejemplo.

SELECT REGEXP_REPLACE('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'p'); +-------------------------------+ | regexp_replace | +-------------------------------+ | [hidden] plain A1234 [hidden] | +-------------------------------+

En el siguiente ejemplo, se utiliza un patrón escrito en el dialecto de PCRE para localizar palabras que contengan al menos un número y una letra en minúsculas. Se utiliza el operador ?=, que tiene una connotación específica de anticipación en PCRE. Para reemplazar cada vez que aparece una palabra que reúne esas características con el valor [hidden], pero difiere del ejemplo anterior, ya que se utiliza una coincidencia sin distinción entre mayúsculas y minúsculas, use el siguiente ejemplo.

SELECT REGEXP_REPLACE('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'ip'); +----------------------------------+ | regexp_replace | +----------------------------------+ | [hidden] plain [hidden] [hidden] | +----------------------------------+

En los siguientes ejemplos se utilizan datos de la tabla USERS en la base de datos de ejemplo TICKIT. Para obtener más información, consulte Base de datos de muestra.

Para eliminar @ y el nombre de dominio de direcciones de correo electrónico, use el siguiente ejemplo.

SELECT email, REGEXP_REPLACE(email, '@.*\\.(org|gov|com|edu|ca)$') FROM users ORDER BY userid LIMIT 4; +-----------------------------------------------+-----------------------+ | email | regexp_replace | +-----------------------------------------------+-----------------------+ | Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero | | Suspendisse.tristique@nonnisiAenean.edu | Suspendisse.tristique | | amet.faucibus.ut@condimentumegetvolutpat.ca | amet.faucibus.ut | | sed@lacusUtnec.ca | sed | +-----------------------------------------------+-----------------------+

Para reemplazar los nombres de dominio de las direcciones de correo electrónico con internal.company.com, use el siguiente ejemplo.

SELECT email, REGEXP_REPLACE(email, '@.*\\.[[:alpha:]]{2,3}','@internal.company.com') FROM users ORDER BY userid LIMIT 4; +-----------------------------------------------+--------------------------------------------+ | email | regexp_replace | +-----------------------------------------------+--------------------------------------------+ | Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero@internal.company.com | | Suspendisse.tristique@nonnisiAenean.edu | Suspendisse.tristique@internal.company.com | | amet.faucibus.ut@condimentumegetvolutpat.ca | amet.faucibus.ut@internal.company.com | | sed@lacusUtnec.ca | sed@internal.company.com | +-----------------------------------------------+--------------------------------------------+