Función REGEXP_COUNT
Busca una cadena para un patrón de expresión regular y devuelve un valor entero que indica la cantidad de veces que el patrón especificado aparece en la cadena. Si no se encuentra coincidencia, la función devuelve 0
. Para obtener más información sobre las expresiones regulares, consulte Operadores POSIX y Expresión regular
Sintaxis
REGEXP_COUNT( source_string, pattern [, position [, parameters ] ] )
Argumentos
- source_string
-
Una cadena
CHAR
oVARCHAR
. - 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.
- position
-
(Opcional) Un número
INTEGER
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 es1
. Si el valor de posición es menor que1
, la búsqueda comienza en el primer carácter de source_string. Si el valor de posición es mayor que el número de caracteres de source_string, el resultado es0
. - 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
INTEGER
Ejemplos
Para contar la cantidad de veces en que aparece una secuencia de tres letras, use el siguiente ejemplo.
SELECT REGEXP_COUNT('abcdefghijklmnopqrstuvwxyz', '[a-z]{3}');
+--------------+ | regexp_count | +--------------+ | 8 | +--------------+
Para contar cuántas veces aparece la cadena FOX
, con una coincidencia que no distingue entre mayúsculas y minúsculas, use el siguiente ejemplo.
SELECT REGEXP_COUNT('the fox', 'FOX', 1, 'i');
+--------------+ | regexp_count | +--------------+ | 1 | +--------------+
Para usar 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, use el siguiente ejemplo. El ejemplo utiliza el operador ?=
, que tiene una connotación específica de anticipación en PCRE. En este ejemplo, se cuenta cuántas veces aparecen dichas palabras, con una coincidencia que distingue entre mayúsculas y minúsculas.
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'p');
+--------------+ | regexp_count | +--------------+ | 2 | +--------------+
Para usar 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, use el siguiente ejemplo. Se utiliza el operador ?=
, que tiene una connotación específica en PCRE. En este ejemplo, se cuenta cuántas veces aparecen dichas palabras, pero difiere del ejemplo anterior, ya que se utiliza una coincidencia sin distinción entre mayúsculas y minúsculas.
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'ip');
+--------------+ | regexp_count | +--------------+ | 3 | +--------------+
En el siguiente ejemplo 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 contar la cantidad de veces en que el nombre del dominio de nivel superior es org
o edu
, use el siguiente ejemplo.
SELECT email, REGEXP_COUNT(email,'@[^.]*\.(org|edu)') FROM users ORDER BY userid LIMIT 4;
+-----------------------------------------------+--------------+ | email | regexp_count | +-----------------------------------------------+--------------+ | Etiam.laoreet.libero@sodalesMaurisblandit.edu | 1 | | Suspendisse.tristique@nonnisiAenean.edu | 1 | | amet.faucibus.ut@condimentumegetvolutpat.ca | 0 | | sed@lacusUtnec.ca | 0 | +-----------------------------------------------+--------------+