Catégories :

Fonctions de chaîne (expressions régulières)

REGEXP_COUNT

Renvoie le nombre de fois qu’un motif se produit dans une chaîne.

Voir aussi Fonctions de chaîne (expressions régulières).

Syntaxe

REGEXP_COUNT( <subject> , <pattern> [ , <position> , <parameters> ] )
Copy

Arguments

Obligatoire :

subject

La chaîne à rechercher pour les correspondances.

pattern

Modèle devant correspondre.

Pour des directives sur la spécification des modèles, voir Fonctions de chaîne (expressions régulières).

Facultatif :

position

Nombre de caractères depuis le début de la chaîne pour lesquels la fonction commence à rechercher des correspondances.

Par défaut : 1 (la recherche d’une correspondance commence au premier caractère à gauche)

parameters

Chaîne d’un ou plusieurs caractères spécifiant les paramètres utilisés pour la recherche de correspondances. Valeurs prises en charge :

Paramètre

Description

c

Correspondance sensible à la casse

i

Correspondance non sensible à la casse

m

Mode multiligne

e

Extraire les sous-correspondances.

s

Le caractère générique POSIX . correspond à \n

Par défaut : c

Pour plus de détails, voir Spécification des paramètres de l’expression régulière.

Renvoie

Renvoie une valeur de type NUMBER. Renvoie NULL si l’un des arguments est NULL.

Notes sur l’utilisation

Reportez-vous aux Notes générales sur l’utilisation pour les fonctions d’expression régulière.

Détails du classement

Arguments with collation specifications are currently not supported.

Exemples

L’exemple suivant compte les occurrences du mot was. La correspondance commence au premier caractère de la chaîne :

SELECT REGEXP_COUNT('It was the best of times, it was the worst of times',
                    '\\bwas\\b',
                    1) AS result;
Copy
+--------+
| RESULT |
|--------|
|      2 |
+--------+

L’exemple suivant illustre des occurrences qui se chevauchent : Créer une table et insérer des données :

CREATE OR REPLACE TABLE overlap (id NUMBER, a STRING);
INSERT INTO overlap VALUES (1,',abc,def,ghi,jkl,');
INSERT INTO overlap VALUES (2,',abc,,def,,ghi,,jkl,');

SELECT * FROM overlap;
Copy
+----+----------------------+
| ID | A                    |
|----+----------------------|
|  1 | ,abc,def,ghi,jkl,    |
|  2 | ,abc,,def,,ghi,,jkl, |
+----+----------------------+

Exécutez une requête qui utilise REGEXP_COUNT pour compter le nombre de fois que le motif suivant est trouvé dans chaque ligne : un signe de ponctuation suivi de chiffres et de lettres, suivi d’un signe de ponctuation.

SELECT id,
       REGEXP_COUNT(a,
                    '[[:punct:]][[:alnum:]]+[[:punct:]]',
                    1,
                    'i') AS result
  FROM overlap;
Copy
+----+--------+
| ID | RESULT |
|----+--------|
|  1 |      2 |
|  2 |      4 |
+----+--------+