将字段中的文字文本值添加到 postgres 中的正则表达式的正确方法是什么?
例如,如果不进行转义, some_field 可能包含无效的正则表达式语法:
where some_text ~* ('\m' || some_field || '\M');
最简单的方法是使用正则表达式将字符串准备在正则表达式中。转义字符串中的非单词字符应该足以使其成为正则表达式安全的,例如:
=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
regexp_replace
--------------------
\. word \* and µ\{
所以像这样的事情一般应该有效:
where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y
where x
and y
是正则表达式的其他部分。
如果您最后不需要正则表达式(即不需要y
上面),那么你可以使用(?q) http://www.postgresql.org/docs/current/static/functions-matching.html#POSIX-METASYNTAX:
ARE 可以从嵌入选项:一个序列(?xyz)
(where xyz
是一个或多个字母字符)指定影响 RE 其余部分的选项。
and a q
意味着:
RE 的其余部分是文字(“引用”)字符串,所有普通字符
所以你可以使用:
where some_text ~* x || '(?q)' || some_field
在这种有限的情况下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)