2017-04-06 467 views
2

我试着做以下使用正则表达式(Java的replaceAll):Java的正则表达式匹配方括号

**Input:** 
Test[Test1][Test2]Test3 

**Output** 
TestTest3 

总之,我需要删除方括号包括在方括号内的一切。

我想这一点,但它不工作:

\\[(.*?)\\] 

你能帮忙吗?

谢谢
腰带

+0

VTC,缺乏MCVE其中模式失败。 http://ideone.com/wf5YMT –

+0

您是否打算设置_nested_括号,或者将所有内容都放在最顶层? –

+0

@TimBiegeleisen顶级的一切。谢谢 –

回答

4

你可以试试这个正则表达式:

\[[^\[]*\] 

和空

更换Demo

样品Java源:

final String regex = "\\[[^\\[]*\\]"; 
final String string = "Test[Test1][Test2]Test3\n"; 
final String subst = ""; 
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); 
final Matcher matcher = pattern.matcher(string); 
final String result = matcher.replaceAll(subst); 
System.out.println(result); 
+0

感谢@Rizwan,它的工作原理是+1,即使您不需要承受痛苦! –

+0

@sash很高兴知道它为你工作,而不必介意痛苦!只要源是一个生成的:)你也可以从regex101.com生成 –

2

你原来的模式对我的作品:

String input = "Test[Test1][Test2]Test3"; 
input = input.replaceAll("\\[.*?\\]", ""); 
System.out.println(input); 

输出:

TestTest3 

注意,你不需要括号内的括号内。如果您计划在每对括号之间捕获内容,那么您会使用它,在您的情况下您不需要这些内容。让他们在那里没有错,只是没有必要。

演示在这里:

Rextester

+0

谢谢蒂姆。 +1为你。这个作品,但@Rizwan很快。 –