replaceAll替换与提供的正则表达式不匹配的所有内容

Tri*_*ian 2 java regex replaceall

replaceAll(String regex, String replacement)字符串类中的方法用给定的替换替换该字符串中与给定的正则表达式匹配的每个子字符串。是否可以否定正则表达式,以便替换所有不匹配的内容?

例如,我在方括号内有一个带有子字符串的字符串(没有嵌套的方括号,其余的字符串既不包含开方括号也不包含方括号)

String test = "some text [keep this] may be some more ..";
Run Code Online (Sandbox Code Playgroud)

我找到了一个正则表达式来提取[]之间的子字符串:

String test = "some text [keep this] may be some more ..";        
Pattern p = Pattern.compile("\\[(.*?)\\]");
Matcher m = p.matcher(test);

while(m.find()) {
    test = m.group(1);
}
Run Code Online (Sandbox Code Playgroud)

我想做的是,如果可能的话,使用replaceAll以某种方式排除正则表达式的方法来替换与上述正则表达式不匹配的所有内容。

String regex = "\\[(.*?)\\]";
test.replaceAll("(?!" + regex + "$).*", "")
Run Code Online (Sandbox Code Playgroud)

我通过搜索“ negate regex”发现这和其他一些不适用于我。

预期输出为 test = "keep this"

YCF*_*F_L 5

您很亲密,可以replaceAll像这样使用,和这样的组一起使用;

test = test.replaceAll(".*\\[(.*?)\\].*", "$1");
Run Code Online (Sandbox Code Playgroud)