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("\\((.+?)\\)", ""));
;;||