PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

La syntaxe Postgresql regexp_matches ne fonctionne pas comme prévu

Le regexp_matches(string text, pattern text [, flags text]) la fonction renvoie les valeurs capturées :

Vous pouvez corriger l'expression en utilisant des groupes non capturants :

SELECT unnest(regexp_matches('4-0001-1234 4.0001.12344  4-0-0-0-1-1234', '4(?:[\s/.-]*0){3}(?:[\s/.-]*[12])(?:[\s/.-]*\d){4}', 'g'));

Voir la démo en ligne .

BTW, vous n'avez pas besoin d'échapper à - quand il est au début/à la fin de l'expression entre parenthèses, et qu'il n'est pas nécessaire d'échapper ni / ni . là. Je suggère également de supprimer {1} comme a =a{1} dans toute expression régulière prenant en charge les quantificateurs limitants.