我在匹配和替换其中一个列值中的'-‘字符时出错。我有下面的PostgreSQL 11.0表。
a b
mp-6 mp 6
我使用下面的正则表达式来匹配两个列值。
regexp_replace(a, '\-', ' ', 'g') ~* ('\y'||regexp_replace(b, '\-', ' ', 'g')||'\y')
我收到以下错误:
[Code: 0, SQL State: 2201B] ERROR: invalid regular expression: quantifier operand invalid
任何帮助都是非常感谢的。
发布于 2021-03-08 19:38:46
看起来右边的字符串包含一些在正则表达式中有特殊含义的字符:
SELECT 'mama' ~* '+1';
ERROR: invalid regular expression: quantifier operand invalid
使用任意字符串作为正则表达式不仅容易出错,而且如果恶意攻击者控制字符串,则可能是危险的。您可以使用ILIKE
-它不会捕获单词的开头或结尾,但也许它已经足够好了:
WHERE replace(a, '-', ' ') ILIKE
'%' || replace(
replace(
replace(
replace(b, '-', ' '),
'\', '\\'
),
'_', '\_'
),
'%', '\%
) || '%'
附加的replace
对模式中的特殊字符进行转义。
https://stackoverflow.com/questions/66528712
复制相似问题