Java正则表达式,用大括号替换所有内容

Java正则表达式,用大括号替换所有内容,java,regex,Java,Regex,我需要更换支架内的所有部件,包括支架。我写了下面的正则表达式来实现这一点,但它并没有像预期的那样工作。在某些情况下,它是有效的,请参阅下文 一, 预期输出-|| 实际-| 二, 预期输出-|| 实际-无任何内容尝试以下正则表达式: public static void main(String[] args) { String s1 = ";;(||)||"; System.out.println(s1.replaceAll("\\(.*?\\)", "")); // reluct

我需要更换支架内的所有部件,包括支架。我写了下面的正则表达式来实现这一点,但它并没有像预期的那样工作。在某些情况下,它是有效的,请参阅下文

一,

预期输出-
||

实际-
|

二,

预期输出-
||

实际-无任何内容

尝试以下正则表达式:

public static void main(String[] args) {
    String s1 = ";;(||)||";
    System.out.println(s1.replaceAll("\\(.*?\\)", "")); // reluctant quantifier
    String s2 = ";;(||)|as|(hello)";
    System.out.println(s2.replaceAll("\\(.*?\\)", ""));
}
O/p:


您需要在替换部件中添加第一个捕获的组索引

System.out.println(";;(||)||".replaceAll("(.*?)(?:\\(.*?\\))", "$1"));
System.out.println(";;||(||)".replaceAll("(.*?)(?:\\(.*?\\))", "$1"));
输出:

;;||
;;||
下面的代码实际上会做什么?

System.out.println(";;(||)||".replaceAll("(.*?)(?:\\(.*?\\))", "$1"));

这个正则表达式
“(.*?(:\(.*?\)”
将只匹配子字符串
;;(| |)
,然后它捕获并存储
编码到组1中。所有匹配的字符将替换为捕获的组1中的字符(即,
)。所以
;;(| |)
将更改为
并且在下面的
| |
子字符串上不会发生任何事情。因此,最后它将输出为
||

这个简单的ony应该适合您的需要:
[(][^)]+[)]
。用空字符串替换所有出现的内容

PS:
[(]
\(
)具有相同的含义,我发现它更具可读性。特别是在Java中,因为您必须避开反斜杠,因为在字符串文本中(
\(
)。

尝试一下:

    System.out.println(";;(||)||".replaceAll("\\((.+?)\\)", ""));
结果是:

;;||     

不确定您的规则,但您可以尝试:
\\([^)]*?\\)
@sp00m-不。您是对的。不需要。已修复。谢谢:)
System.out.println(";;(||)||".replaceAll("(.*?)(?:\\(.*?\\))", "$1"));
    System.out.println(";;(||)||".replaceAll("\\((.+?)\\)", ""));
;;||