正则表达式将字符串中的单引号加倍

时间:2010-01-02 15:36:01

标签: sql regex

我想要一个可以做到这一点的正则表达式:

VALUES('Hit 'n Run')

进入

VALUES('Hit ''n Run')

这可能吗?

2 个答案:

答案 0 :(得分:4)

不,这不太可能。如果您有VALUES('Hit 'n Run'),则您已经有一个无效的分隔符撇号和文字撇号的混合。字符串处理就像混合糖和盐:一旦你混合了上下文而没有适当的逃逸,就没有办法将它们拉回来。

如果您正在尝试拯救损坏的数据,可以尝试(?<!\()'(?!\))之类的内容来匹配旁边没有括号的撇号。这是一个弱的,容易被愚弄的策略,但对于简单的数据,它可能会起作用。

如果要将动态SQL查询放在一起,则必须先将' 转义,然后将其放入查询字符串中,或​​者使用简单字符串替换'和{{ 1}}如果您确定这是DBMS所需的唯一转义,或者 - 更好 - 使用适合您的DBMS的专用SQL-string-literal-escaping函数。这个功能究竟取决于您所谈论的平台(语言,DBMS)。

答案 1 :(得分:2)

然后可以利用任何可以在RegEx中表达的模式来创建您试图避免的SQL注入问题。

令人讨厌的输入:

VALUES(');DELETE * FROM customer;SELECT '