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.