Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当模式匹配多个组时,我的Java regexp替换了太多的文本_Java_Regex - Fatal编程技术网

当模式匹配多个组时,我的Java regexp替换了太多的文本

当模式匹配多个组时,我的Java regexp替换了太多的文本,java,regex,Java,Regex,用这样的字符串: 3 SOME STRING (remove me) 6 SOME OTHER STRING (also remove me!) 8 THIRD STRING (and me) 目标是去掉括号中的任何内容,并将字符串转换为: 3 SOME STRING 6 SOME OTHER STRING 8 THIRD STRING 迄今为止,我最大的努力是: private String removeAnythingInParentheses(String input) {

用这样的字符串:

3 SOME STRING (remove me) 6 SOME OTHER STRING (also remove me!) 8 THIRD STRING (and me)
目标是去掉括号中的任何内容,并将字符串转换为:

3 SOME STRING 6 SOME OTHER STRING 8 THIRD STRING 
迄今为止,我最大的努力是:

private String removeAnythingInParentheses(String input) {
    return Pattern.compile("\\(.*\\)").matcher(input).replaceAll("").trim();
}
但是,这替换了太多的字符串,并留下了(我猜它将字符串中的第一个括号与最后一个括号相匹配):


我确信Pattern和Matcher有一些很好的功能我可以使用,但我无法找出它们…

如评论所示。正确答案是:

private String removeAnythingInParentheses(String input) {
    return Pattern.compile("\\([^()]*\\)").matcher(input).replaceAll("").trim();
}

我想简单地使用
String.replaceAll
和一个修改过的正则表达式会更容易

 input.replaceAll("\\(.*?\\)", "");
完整代码

    String input = "3 SOME STRING (remove me) 6 SOME OTHER STRING (also remove me!) 8 THIRD STRING (and me)";
    input = input.replaceAll("\\(.*?\\)", "");

    System.out.println(input);
输出


3一些字符串6一些其他字符串8第三个字符串

我看了这两篇文章,但似乎仍然没有弄明白:使用类似于:
“\\([^\\(\\)]*\\)”
*
之后添加一个
。莫里斯·佩里:不错的一个很有魅力![]内有两个可移除的冗余逃逸!这更像:)谢谢。但是请为编译后的模式设置一个常量:无需每次调用该方法时都编译它。
    String input = "3 SOME STRING (remove me) 6 SOME OTHER STRING (also remove me!) 8 THIRD STRING (and me)";
    input = input.replaceAll("\\(.*?\\)", "");

    System.out.println(input);