如何在java中使用Matcher.replaceAll?

时间:2011-02-11 18:31:43

标签: java regex

我有一个包含"(*""*)"的文件。我想删除这两个char序列之间的所有内容。 我使用了以下代码,但它没有对我的字符串做任何事情。

    String regex = "\\(\\*.*\\*\\)";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    matcher.replaceAll("");

'输入'是:

(* This program prints out a message. *)

program is

  begin
    write ("Hello, world!");
  end;

1 个答案:

答案 0 :(得分:2)

您需要捕获匹配器的返回值 - 它的replaceAll方法返回替换的String。

此外,使用正则表达式匹配您想要匹配的内容,这次是带括号的String。如果您没有一些奇怪的输入,它可能如下所示:

String regex = "\\(\\*.*\\*\\)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
String result = matcher.replaceAll("(\\*\\*)");
System.out.println(result);

这个regexp实际上捕获了从第一个评论开始到最后一个评论结束的整个区域,这通常不是你想要的。为了让它与非贪婪(不情愿)相匹配,请使用此正则表达式:\(\*.*?\*\)(在Java中使用加倍的反斜杠。)

相关问题