En Oracle, REGEXP_COUNT()
La función devuelve el número de veces que aparece un patrón en una cadena de origen.
Sintaxis
La sintaxis es así:
REGEXP_COUNT (source_char, pattern [, position [, match_param]])
donde:
source_char
es una expresión de carácter que sirve como valor de búsqueda.pattern
es la expresión regular.position
es un entero positivo que especifica dónde comenzar la búsqueda. El valor predeterminado es1
, es decir, comience la búsqueda en el primer carácter.match_param
le permite cambiar el comportamiento de coincidencia predeterminado de la función. Por ejemplo, le permite especificar mayúsculas y minúsculas, cómo se tratan varias líneas y espacios, etc.
Ejemplo
Aquí hay un ejemplo básico del uso de REGEXP_COUNT()
en Oráculo:
SELECT
REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;
Resultado:
1
En este caso hay una coincidencia.
Las expresiones regulares pueden ser muy poderosas, y este ejemplo usa un ejemplo muy simple. Para usar REGEXP_COUNT()
efectivamente, necesitará saber el patrón correcto para usar para el resultado deseado. Los ejemplos de esta página se centran en REGEXP_COUNT()
función en sí misma, no en expresiones regulares.
Sin coincidencia
Aquí hay un ejemplo donde no hay coincidencia:
SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;
Resultado:
0
No hay coincidencia, entonces 0
es devuelto.
Coincidencias Múltiples
Aquí hay un ejemplo con múltiples coincidencias:
SELECT
REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;
Resultado:
2
En este caso, hay dos coincidencias.
Posición de inicio
Puede especificar una posición inicial:
SELECT
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;
Resultado:
1
Así que aquí solo tenemos una coincidencia. Esto se debe a que la búsqueda no comienza hasta después de la primera aparición (posición 8).
Sensibilidad de mayúsculas y minúsculas
El REGEXP_COUNT()
La función sigue las reglas de determinación de intercalación de Oracle, que definen la intercalación que se utilizará al hacer coincidir la cadena con el patrón.
Sin embargo, puede especificar explícitamente la distinción entre mayúsculas y minúsculas con el cuarto argumento opcional. Cuando hace esto, anula cualquier distinción entre mayúsculas y minúsculas o acentos de la intercalación determinada.
Puede especificar i
para coincidencias que no distinguen entre mayúsculas y minúsculas y c
para hacer coincidir mayúsculas y minúsculas.
He aquí un ejemplo:
SELECT
REGEXP_COUNT('My Cats', 'c.t', 1) AS "Default",
REGEXP_COUNT('My Cats', 'c.t', 1, 'i') AS "Case Insensitive",
REGEXP_COUNT('My Cats', 'c.t', 1, 'c') AS "Case Sensitive"
FROM DUAL;
Resultado:
Default Case Insensitive Case Sensitive __________ ___________________ _________________ 0 1 0
Aquí, mi colación distingue entre mayúsculas y minúsculas. Las otras dos cadenas fueron forzadas a una coincidencia entre mayúsculas y minúsculas y mayúsculas y minúsculas, respectivamente.
Argumentos nulos
Con la excepción del cuarto argumento, proporcionando null
para un argumento da como resultado null
:
SET NULL 'null';
SELECT
REGEXP_COUNT(null, 'c.t', 1, 'i') AS "1",
REGEXP_COUNT('Cat', null, 1, 'i') AS "2",
REGEXP_COUNT('Cat', 'c.t', null, 'i') AS "3",
REGEXP_COUNT('Cat', 'c.t', 1, null) AS "4"
FROM DUAL;
Resultado:
1 2 3 4 _______ _______ _______ ____ null null null 0
De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null
ocurre como resultado de un SQL SELECT
declaración.
Sin embargo, puede usar SET NULL
para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null
debe ser devuelto.
Número incorrecto de argumentos
No pasar argumentos a la función, o pasar muy pocos, da como resultado un error:
SELECT REGEXP_COUNT()
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT REGEXP_COUNT() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Lo mismo se aplica cuando pasamos demasiados argumentos:
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action:
Más información
El REGEXP_COUNT()
(así como otras implementaciones de expresiones regulares de Oracle) se ajusta al estándar de expresiones regulares de la Interfaz de sistema operativo portátil (POSIX) de IEEE y a las Directrices de expresiones regulares de Unicode del Consorcio Unicode.
Consulte la documentación de Oracle para obtener más información y ejemplos de REGEXP_COUNT()
función.