sql >> Database >  >> RDS >> PostgreSQL

De juiste manier om tekst zonder escapecodes uit een veld toe te voegen aan een regex in postgres?

Het gemakkelijkste is om een ​​regex te gebruiken om je string voor te bereiden op een regex. Het escaleren van niet-woordtekens in uw tekenreeks zou voldoende moeten zijn om het regex-veilig te maken, bijvoorbeeld:

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

Dus zoiets als dit zou in het algemeen moeten werken:

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

waar x en y zijn de andere delen van de regex.

Als je aan het eind geen regex nodig had (d.w.z. geen y hierboven), dan kunt u (?q) :

en een q betekent dat de:

Dus je zou kunnen gebruiken:

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

in dit beperkte geval.




  1. Voeg een primaire sleutelkolom toe aan een oude tabel zonder primaire sleutel

  2. Hoe SQL Server-tabelwijzigingen te controleren met behulp van c#?

  3. lagere_case_table_names Instellingen in MySQL 8.0.12

  4. Maak een tijdelijke tabel in een SELECT-instructie zonder een aparte CREATE TABLE