我有一个字符串,其格式为:
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
答案 0 :(得分:0)
这是一个非常简单,天真的正则表达式:
:(\w+)
将匹配替换为值,$1
包含参数名称。
这是一种不太天真的尝试:
'(?:''|[^'])*'|:(\w+)
如果设置了$1
,请将匹配替换为值($1
包含参数名称),否则不要替换。此版本可让您处理WHERE column = 'some text :not_a_param more text'
并且...... not naive 方法是将预处理语句和SQL参数与您正在使用的任何SQL客户端一起使用。这是最好的选择,因为如果你做错了,它可以消除SQL注入的任何风险,并让DBMS缓存你的请求的执行计划。