正则表达式替换SQL语句中的字段

问题描述:

我想用正则表达式匹配一个insert的SQL语句,能够自动地将变量赋给对应的字段,比如
SQL=“insert into table(item1,item2,item3) values(:item1,:item2,:item3)”
map.put(item1,"111")
map.put(item2,"222")
map.put(item3,"333")

我想用正则表达式自动的将SQL语句中的:item1,:item2,:item3替换成map中对应的“111”,"222","333"

请问我该怎么写正则表达式的匹配语句和 对应的方法。

搞错了。忘了加上非捕获组。刚才代码未验证。呵呵,偷懒了。
[code="java"]String SQL="insert into table(item1,item2,item3) values(:item1,:item2,:item3)";
Map map = new HashMap();
map.put("item1","111");
map.put("item2","222");
map.put("item3","333");

        Pattern p=Pattern.compile("(?::)(\\w+)(?:\\b)");   
        Matcher m=p.matcher(SQL);   
        StringBuffer result=new StringBuffer();   
        while (m.find()) {   
            String key=m.group(1);   
            m.appendReplacement(result,(String)map.get(key));   
        }   
        m.appendTail(result);   
        String resultSql=result.toString();
        System.out.println(resultSql);[/code]

[code="java"]Pattern p=Pattern.compile(":(\w+)\b");
Match m=p.matcher(SQL);
StringBuffer result=new StringBuffer();
while (m.find()) {
String key=m.group(1);
m.appendReplacement(result,map.get(key));
}
m.appendTail(result);
String resultSql=result.toString();[/code]

不建议这么做,可能导致未验证BUG。至少
对于这样的SQL是不适用的:
SQL=“insert into table(item1,item2,item3) values('AAA:item1',:item2,:item3)”.
会把字符串中的值替换掉。

SQL还是用preparedStatement方式注入参数比较好。

[quote]
[color=red]不建议这么做,可能导致未验证BUG。至少
[/color][/quote]

同上,这种做法无法防范SQL注入攻击

用PreparedStatement多好啊
同样可以满足你的需求
而且无需考虑单引号的转义,sql注入攻击这些问题