正则表达式在字符串

时间:2016-07-21 00:27:50

标签: java regex

我有这样的代码:

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_idgroup_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_idchanged_at被替换。

我是正则表达式的新手,我陷入了困境。我已经尝试了所有我能想到的正则表达式的组合但没有效果。问题是我没有看到问题,我觉得这个正则表达式很好,应该做的工作:在字符串中找到一个区域,匹配(数字)作为组1 +(逗号+任何东西+逗号+空格)作为组2 +(数字)为第3组。

有人可以指导我如何构建正确的正则表达式吗?我的错误是什么?

2 个答案:

答案 0 :(得分:1)

如果您想构建一个SQL查询,那么就有这样的API。 如果你只是想使用正则表达式,这可能是你正在寻找的: (\\d+)([,].*?[,]\\s)(\\d+),放一个?在*

之后

答案 1 :(得分:1)

这不是一个答案,而是一个在线测试正则表达式的网站。 https://regex101.com/#pcre。获得正确的正则表达式非常有帮助。