替换字符串中的模式匹配

时间:2012-11-22 13:16:45

标签: java regex pattern-matching

String output = "";
pattern = Pattern.compile(">Part\s.");
matcher = pattern.matcher(docToProcess);
while (matcher.find()) {
      match = matcher.group();
}

我正在尝试使用上面的代码在>Part\s.内找到模式docToProcess(这是一个大型xml文档的字符串)然后我要做的是替换内容将模式与<ref></ref>

匹配

如果output变量等于docToProcess,除了上面所示的替换外,我有什么想法?

编辑:我需要在更换时以某种方式使用匹配器。我不能只使用replaceAll()

4 个答案:

答案 0 :(得分:3)

您可以使用String#replaceAll方法。它需要Regex作为第一个参数: -

String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");

请注意,dot (.)regex中的一个特殊元字符,它匹配所有内容,而不仅仅是dot(.)。所以,你需要逃避它,除非你真的想匹配>Part\\s之后的任何角色。并且你需要在Java中添加2个反斜杠来逃避。


如果您想使用Matcher课程,可以使用Matcher.appendReplacement方法: -

 String docToProcess = "XYZ>Part .asdf";
 Pattern p = Pattern.compile(">Part\\s\\.");
 Matcher m = p.matcher(docToProcess);
 StringBuffer sb = new StringBuffer();
 while (m.find()) {
     m.appendReplacement(sb, "<ref></ref>");
 }
 m.appendTail(sb);
 System.out.println(sb.toString());

输出: -

"XYZ<ref></ref>asdf"

答案 1 :(得分:1)

这就是你需要的:

String docToProcess = "... your xml here ...";
Pattern pattern = Pattern.compile(">Part\\s.");
Matcher matcher = pattern.matcher(docToProcess);
StringBuffer output = new StringBuffer();
while (matcher.find()) matcher.appendReplacement(output, "<ref></ref>");
matcher.appendTail(output);

不幸的是,由于Java API的历史限制,您无法使用StringBuilder

答案 2 :(得分:0)

docToProcess.replaceAll(">Part\\s[.]", "<ref></ref>");

答案 3 :(得分:0)

String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");