正则表达式用值替换参数名称

时间:2014-08-23 23:16:38

标签: regex

我有一个字符串,其格式为:

UPDATE "TABLE"."ITEMS" SET ITM_DESCR=:sqldevvalue WHERE ROWID = :sqldevgridrowid AND ORA_ROWSCN = :sqldevgridrowscn

及其绑定值为:     #1(11):Test Record #2(18):AAAG9IAAFAAAC0eAAB #3(7):7746161

如何构造一个正则表达式来将参数名称(以:)开头替换为相应的值,并创建一个具有以下形式的组合字符串:

UPDATE "TABLE"."ITEMS" SET ITM_DESCR=Test Record WHERE ROWID = AAAG9IAAFAAAC0eAAB AND ORA_ROWSCN = 7746161

1 个答案:

答案 0 :(得分:0)

这是一个非常简单,天真的正则表达式:

:(\w+)

将匹配替换为值,$1包含参数名称。

这是一种不太天真的尝试:

'(?:''|[^'])*'|:(\w+)

如果设置了$1,请将匹配替换为值($1包含参数名称),否则不要替换。此版本可让您处理WHERE column = 'some text :not_a_param more text'

等情况

并且...... not naive 方法是将预处理语句和SQL参数与您正在使用的任何SQL客户端一起使用。这是最好的选择,因为如果你做错了,它可以消除SQL注入的任何风险,并让DBMS缓存你的请求的执行计划。