如何在String replaceAll中使用Pattern

时间:2014-02-10 16:16:54

标签: java regex

我在replaceAll方法中使用了Pattern作为参数,我想删除open和close括号内的所有字符(包括括号字符)但是只有chars里面的字符被删除,括号仍然存在。下面是我的java代码

String test = "This is my test ( inside the brackets ) and finish here";
String regex = "\\(.*\\)";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(test);
String out = test.replaceAll(matcher.group(), "");
System.out.println(out);

输出为This is my test () and finish here.

3 个答案:

答案 0 :(得分:3)

要与Pattern一起使用,您需要使用Matcher#replaceAll而不是String#replaceAll

String test = "This is my test ( inside the brackets ) and finish here";
String regex = "(?<=\\().*?(?=\\))";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(test);
String out = matcher.replaceAll("");
System.out.println(out);
//=> This is my test () and finish here

PS:您还需要更改输出的正则表达式。

答案 1 :(得分:1)

您无法从该代码中获得该结果。如果您未在匹配器上拨打find(),则在致电group()时会收到例外情况。但是,如果您执行首先调用find()group()将返回字符串( inside the brackets ),这将被视为正则表达式,这意味着括号将被视为元字符。因此它将匹配inside the brackets(包括前导和尾随空格,但不包括括号)。这可以解释你的输出。

修复方法是调用matcher.replaceAll("")而不是test.replaceAll(matcher.group(), "")。并且不要打电话给matcher.find()。 ;)

答案 2 :(得分:0)

尝试,

String test = "This is my test ( inside the brackets ) and finish here";
System.out.println(test.replaceAll("\\(.*\\)", ""));

String.replaceAll()的第一个参数是正则表达式