首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >匹配PostgreSQL 11.0表的特殊字符列时出错

匹配PostgreSQL 11.0表的特殊字符列时出错
EN

Stack Overflow用户
提问于 2021-03-08 19:09:55
回答 1查看 30关注 0票数 0

我在匹配和替换其中一个列值中的'-‘字符时出错。我有下面的PostgreSQL 11.0表。

代码语言:javascript
复制
a      b
mp-6   mp 6

我使用下面的正则表达式来匹配两个列值。

代码语言:javascript
复制
regexp_replace(a, '\-', ' ', 'g') ~* ('\y'||regexp_replace(b, '\-', ' ', 'g')||'\y')

我收到以下错误:

代码语言:javascript
复制
[Code: 0, SQL State: 2201B]  ERROR: invalid regular expression: quantifier operand invalid

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2021-03-08 19:38:46

看起来右边的字符串包含一些在正则表达式中有特殊含义的字符:

代码语言:javascript
复制
SELECT 'mama' ~* '+1';
ERROR:  invalid regular expression: quantifier operand invalid

使用任意字符串作为正则表达式不仅容易出错,而且如果恶意攻击者控制字符串,则可能是危险的。您可以使用ILIKE -它不会捕获单词的开头或结尾,但也许它已经足够好了:

代码语言:javascript
复制
WHERE replace(a, '-', ' ') ILIKE
      '%' || replace(
                replace(
                   replace(
                      replace(b, '-', ' '),
                      '\', '\\'
                   ),
                   '_', '\_'
                ),
                '%', '\%
             ) || '%'

附加的replace对模式中的特殊字符进行转义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66528712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档