Den nemmeste ting at gøre er at bruge et regex til at forberede din streng til at være i et regex. At undslippe ikke-ord-tegn i din streng burde være tilstrækkeligt til at gøre den regex-sikker, for eksempel:
=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
regexp_replace
--------------------
\. word \* and µ\{
Så noget som dette burde fungere generelt:
where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y
hvor x
og y
er de andre dele af regex.
Hvis du ikke havde brug for et regex i slutningen (dvs. ingen y
ovenfor), så kan du bruge (?q)
:
og en q
betyder, at:
Så du kan bruge:
where some_text ~* x || '(?q)' || some_field
i dette begrænsede tilfælde.