首页新闻找找看学习计划

正则表达式匹配sql语句

0
悬赏园豆:10 [已解决问题] 解决于 2014-07-20 11:21

背景:模拟sql语句操作XML。
经过初步分析发现插入语句的格式是这样的:insert\sinto\s元素名(元素里面的属性或子元素)\svalues(相应的值);

例如要用正则表达式匹配这样一个字符串:
insert into videourl(id,vname,httpurl,count) values(23,23,4,3);

下面是我自己写的正则表达式(java中):
"insert\\sinto\\s.+\\((.*,)*.*\\)\\svalues\\(相应的值\\);?"

在"相应的值"那里应该怎么写呢?主要是匹配相应的个数,也就是说“键值对”数量应该对应,有没有这样的方法呢?

或者大家也可以自己写一个匹配上面那条sql语句的正则表达式,跪谢,在线等。

打伞的鱼的主页 打伞的鱼 | 初学一级 | 园豆:174
提问于:2014-02-15 12:18
< >
分享
最佳答案
0

id,vname,httpurl,count分别对应int string string int 你可以试一下\d+,.+?,.+?,\d+ 这个你的保证前面的必须有 才行 不然对应不上

收获园豆:10
wolfy | 老鸟四级 |园豆:2636 | 2014-02-15 13:10

所以比较麻烦,不过我找到方法解决了

 1 private boolean matchSql(String sql) {
 2         
 3         //insert into videourl(id,vname,httpurl,count) values(23,23,4,3);
 4         Pattern pattern = Pattern.compile("insert\\sinto\\s.+\\(((.*,)*.*)\\)\\svalues\\(((.*,)*.*)\\);?");
 5         Matcher matcher = pattern.matcher(sql);
 6         boolean flag = false;
 7         
 8         if(matcher.find()) {    //匹配键值对是否相对应
 9             sqlKey = matcher.group(1).split(",");
10             sqlValue = matcher.group(3).split(",");
11             if(sqlKey.length == sqlValue.length) {
12                 flag = true;
13             }
14             
15         }
16         
17         return flag;
18     }

 

打伞的鱼 | 园豆:174 (初学一级) | 2014-02-15 14:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册