Điều dễ dàng nhất để làm là sử dụng một regex để chuẩn bị cho chuỗi của bạn ở trong một regex. Việc loại bỏ các ký tự không phải từ trong chuỗi của bạn phải đủ để làm cho nó trở nên an toàn, ví dụ:
=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
regexp_replace
--------------------
\. word \* and µ\{
Vì vậy, một cái gì đó như thế này sẽ hoạt động nói chung:
where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y
ở đâu x
và y
là các phần khác của regex.
Nếu bạn không cần regex ở cuối (tức là không có y
ở trên), thì bạn có thể sử dụng (?q)
:
và một q
có nghĩa là:
Vì vậy, bạn có thể sử dụng:
where some_text ~* x || '(?q)' || some_field
trong trường hợp hạn chế này.