正则表达式替换括号()之间的内容

| 我尝试了这段代码:
string.replaceAll(\"\\\\(.*?)\",\"\");
但它返回null。我想念什么?     
已邀请:
尝试:
string.replaceAll(\"\\\\(.*?\\\\)\",\"\");
您没有转义第二个括号,也没有在第一个括号中添加其他\“ \\\”。     
首先,您是否要删除括号及其内容?尽管问题的标题表示否,但我假设您也希望删除括号。 其次,括号之间的内容是否可以包含嵌套的匹配括号?该解决方案假定是。由于Java regex风格不支持递归表达式,因此解决方案是首先制作与“最内”括号匹配的正则表达式,然后以迭代方式应用此正则表达式,由内而外替换它们。这是一个经过测试的Java程序,可以正确删除(可能嵌套的)括号及其内容:
import java.util.regex.*;
public class TEST {
    public static void main(String[] args) {
        String s = \"stuff1 (foo1(bar1)foo2) stuff2 (bar2) stuff3\";
        String re = \"\\\\([^()]*\\\\)\";
        Pattern p = Pattern.compile(re);
        Matcher m = p.matcher(s);
        while (m.find()) {
            s = m.replaceAll(\"\");
            m = p.matcher(s);
        }
        System.out.println(s);
    }
}
测试输入:
\"stuff1 (foo1(bar1)foo2) stuff2 (bar2) stuff3\"
测试输出:
\"stuff1  stuff2  stuff3\"
请注意,lazy-dot-star解决方案永远不会起作用,因为嵌套嵌套时,它无法匹配最里面的括号。 (即,它错误地匹配:在上面的示例中为
(foo1(bar1)
。)这是一个非常常见的正则表达式错误:当表达式更精确时,切勿使用点!在这种情况下,一组\“ innermost \”匹配括号之间的内容由不是开头或结尾括号的任何字符组成(即,使用:
[^()]*
代替:
.*?
)。     
试试
string.replaceAll(\"\\\\(.*?\\\\)\",\"\")
。     
string.replaceAll(\"\\\\([^\\\\)]*\\\\)\",\"\");
这样,您说的是匹配一个方括号,然后匹配所有非闭合方括号字符,然后匹配一个闭合方括号。这通常比勉强或贪婪的。*匹配器快。     

要回复问题请先登录注册