使用正则表达式替换子字符串

时间:2012-07-12 07:52:34

标签: java regex substring

我有一个包含许多<xxx>值的字符串。

我想要检索<>中的值,进行一些操作并将新值重新插入到字符串中。

我做的是

input = This is <abc_d> a sample <ea1_j> input <lmk_02> string
while(input.matches(".*<.+[\S][^<]>.*"))
{
   value = input.substring(input.indexOf("<") + 1, input.indexOf(">"));
   //calculate manipulatedValue from value
   input = input.replaceFirst("<.+>", manipulatedValue);
}

但在第一次迭代后,值包含abc_d> a sample <ea1_j> input <lmk_02。我相信indexOf(“&gt;”)将给出“&gt;”的第一个索引。我哪里出错了?

3 个答案:

答案 0 :(得分:2)

这是完成您要做的事情的一种稍微简单的方法:

String input = "This is <abc_d> a sample <ea1_j> input <lmk_02> string";
Matcher matcher = Pattern.compile("<([^>]*)>").matcher(input);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
    matcher.appendReplacement(sb, manipulateValue(matcher.group(1)));
}
matcher.appendTail(sb);
System.out.println(sb.toString());

答案 1 :(得分:0)

这是appendReplacementappendTail成语的一个很好的用例:

Pattern p = Pattern.compile("<([^>]+)>");
Matcher m = p.matcher(input);
StringBuffer out = new StringBuffer():
while(m.find()) {
  String value = m.group(1);
  // calculate manipulatedValue
  m.appendReplacement(out, Matcher.quoteReplacement(manipulatedValue));
}
m.appendTail(out);

答案 2 :(得分:-1)

尝试使用转义字符\\到正则表达式。