我有这样的代码:
Pattern p = Pattern.compile("(\\d+)([,].*[,]\\s)(\\d+)");
StringBuffer buffer = new StringBuffer();
String a = "insert into dpma_dp_t (dp_id, dp_identifier, dp_model_key, group_id, description, suppressed_reason, is_qualifiable, changed_by, changed_at) values (3, 'dag', 'ALG0DAY', 2, 'Prio 0', 'ANS01', 'False', 100, 1);";
Matcher m = p.matcher(a);
if (m.find()) {
m.appendReplacement(buffer, "'$1'$2'$3'");
}
m.appendTail(buffer);
System.out.println(buffer);
它尝试分别替换dp_id
和group_id
'3'
和'2'
的值。
但是我将此作为输出:
插入dpma_dp_t(dp_id,dp_identifier,dp_model_key,group_id,description,suppress_reason,is_qualifiable,changed_by,changed_at)值('3','dag','ALG0DAY',2,'Prio 0','ANS01', 'False',100,'1');
dp_id
和changed_at
被替换。
我是正则表达式的新手,我陷入了困境。我已经尝试了所有我能想到的正则表达式的组合但没有效果。问题是我没有看到问题,我觉得这个正则表达式很好,应该做的工作:在字符串中找到一个区域,匹配(数字)作为组1 +(逗号+任何东西+逗号+空格)作为组2 +(数字)为第3组。
有人可以指导我如何构建正确的正则表达式吗?我的错误是什么?
答案 0 :(得分:1)
如果您想构建一个SQL查询,那么就有这样的API。
如果你只是想使用正则表达式,这可能是你正在寻找的:
(\\d+)([,].*?[,]\\s)(\\d+)
,放一个?在*
答案 1 :(得分:1)
这不是一个答案,而是一个在线测试正则表达式的网站。 https://regex101.com/#pcre。获得正确的正则表达式非常有帮助。