背景:模拟sql语句操作XML。
经过初步分析发现插入语句的格式是这样的:insert\sinto\s元素名(元素里面的属性或子元素)\svalues(相应的值);
例如要用正则表达式匹配这样一个字符串:
insert into videourl(id,vname,httpurl,count) values(23,23,4,3);
下面是我自己写的正则表达式(java中):
"insert\\sinto\\s.+\\((.*,)*.*\\)\\svalues\\(相应的值\\);?"
在"相应的值"那里应该怎么写呢?主要是匹配相应的个数,也就是说“键值对”数量应该对应,有没有这样的方法呢?
或者大家也可以自己写一个匹配上面那条sql语句的正则表达式,跪谢,在线等。
id,vname,httpurl,count分别对应int string string int 你可以试一下\d+,.+?,.+?,\d+ 这个你的保证前面的必须有 才行 不然对应不上
所以比较麻烦,不过我找到方法解决了
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 }