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

Bonne façon d'ajouter du texte non échappé d'un champ à une expression régulière dans postgres?

La chose la plus simple à faire est d'utiliser une regex pour préparer votre chaîne à être dans une regex. L'échappement de caractères non verbaux dans votre chaîne devrait suffire à la rendre sûre pour les expressions régulières, par exemple :

=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
   regexp_replace   
--------------------
 \. word \* and µ\{

Donc, quelque chose comme ça devrait fonctionner en général :

where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y

x et y sont les autres parties de la regex.

Si vous n'avez pas besoin d'une expression régulière à la fin (c'est-à-dire pas de y ci-dessus), alors vous pouvez utiliser (?q) :

et un q signifie que :

Vous pouvez donc utiliser :

where some_text ~* x || '(?q)' || some_field

dans ce cas limité.