java – 正则表达式从插入查询中提取值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 正则表达式从插入查询中提取值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2066字,纯文字阅读大概需要3分钟。
内容图文
![java – 正则表达式从插入查询中提取值](/upload/InfoBanner/zyjiaocheng/796/904950b925a344d5a591f96216f3230d.jpg)
假设我有这个问题
INSERT INTO `TABLENAME` VALUES(xxx,yyy,zzz);
我正在使用以下方法单独提取值
public String extractValues(String queryLine){
return queryLine.substring(queryLine.indexOf('(') + 1,queryLine.lastIndexOf(')'));
}
但后来我意识到Insert查询可以采取以下形式,
INSERT INTO `TABLENAME` VALUES(xxx,yyy,zzz),(aaa,bbb,ccc);
我现在如何提取值?
我想也许正则表达式是要去和分裂的方式),(但这似乎并不正确.如果其中一个值具有那些?那么我不确定.
请指导.
案例我正在努力处理
INSERT INTO `TABLENAME` VALUES(xxx,yyy,zzz),(aaa,'bb(,)b',ccc);
必需输出:xxx,yyy,zzz和aaa,’bb(,)b’,ccc
P.S:值之间的逗号无关紧要
解决方法:
识别支持字面文字的语言中的某种模式(必须从识别中排除)通常用这种方案解决:
>找到并替换你在char文字中搜索的模式,例如’b),(bb’应该变为’b ### bb’
>对修改后的字符串执行识别
>恢复char文字中的模式,所以’b ### b’应该返回’b),(bb’
我不知道如何使用单个语句或单个正则表达式来完成此操作.为了这个论点,我写了下面的代码.
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ValuesListParse {
public static void main(String[] args) {
String stmt = " INSERT INTO `TABLENAME` VALUES(xxx,yyy,zzz),(aaa,'bb),(b',ccc),(aaa,bbb,ccc); ";
System.out.printf("%s\n", stmt);
//extract values list
stmt = stmt.split("(?i)\\s+values\\s*\\(|\\);")[1];
System.out.printf("values list: %s\n", stmt);
// identify pattern between '' (char literal) and replace it with another pattern: the 2nd group is what we want
/* UPDATE modified regexp from ('.*)(\\)\\,\\()(.*') to ('\\w*)(\\)\\,\\()+(\\w*') to manage multiple literals containig the pattern */
Matcher m = Pattern.compile("('\\w*)(\\)\\,\\()+(\\w*')").matcher(stmt);
while (m.find()) {
stmt = stmt.substring(0, m.start(2)) + "###" + stmt.substring(m.end(2), stmt.length());
System.out.printf("values list with pattern subst inside char literal: %s\n", stmt);
}
// split multiple values
String[] multiValues = stmt.split("\\)\\,\\(");
// adjust char literal
for (int i = 0; i < multiValues.length ; i++) {
multiValues[i] = multiValues[i].replaceAll("###", "),(");
}
System.out.println(Arrays.toString(multiValues));
}
}
内容总结
以上是互联网集市为您收集整理的java – 正则表达式从插入查询中提取值全部内容,希望文章能够帮你解决java – 正则表达式从插入查询中提取值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。