Vous n'êtes pas identifié(e).

#1 24/07/2011 14:22:23

debutant_24
Membre

Compter le nombre d'apparition d'un caractère dans une chaine

Bonjour !

Je cherche depuis un moment un moyen de compter le nombre d'apparition d'un caractère dans une chaine avec une requête.

Par exemple sur la chaine :

'mais où est donc passée la regex ?'

je cherche le nombre d'apparition du caractère "e", et la requête me retournerai : 4

Si quelqu'un connait la technique pour obtenir ça ...

Merci !

Hors ligne

#2 24/07/2011 15:40:54

gleu
Administrateur

Re : Compter le nombre d'apparition d'un caractère dans une chaine

b1=# select length(regexp_replace('mais où est donc passée la regex ?', '[^e]', '', 'g'));
 length 
--------
      4
(1 row)

La fonction regexp_replace permet de remplacer dans le premier argument tout ce qui correspond à la regexp du second argument par la chaîne du troisième argument. Le quatrième argument permet de fournir des options. Du coup, là, on remplace tout ce qui n'est pas égale à e (regexp [^e]) par rien (''). Du coup, on supprime tout ce qui ne correspond pas au caractère recherché. On ne doit pas s'arrêter au premier remplacement d'où l'option 'g'. La chaîne résultante contient donc uniquement la lettre recherchée autant de fois qu'elle apparaît dans la chaîne source. Il ne reste plus qu'à calculer sa longueur avec length().


Guillaume.

Hors ligne

#3 24/07/2011 15:50:58

debutant_24
Membre

Re : Compter le nombre d'apparition d'un caractère dans une chaine

le problème, c'est que je ne peux pas me permettre de modifier le texte qu'il y a dans le champs, sinon il ne veut plus rien dire sad

Hors ligne

#4 24/07/2011 16:05:29

gleu
Administrateur

Re : Compter le nombre d'apparition d'un caractère dans une chaine

Ça ne modifie rien dans le champ.


Guillaume.

Hors ligne

Pied de page des forums