匹配括号的正则表达式

Amm*_*mmu 54 java regex

在字符串中匹配'('的正则表达式是什么?

以下是场景:

我有一个字符串

str = "abc(efg)";
Run Code Online (Sandbox Code Playgroud)

我想'('用正则表达式拆分字符串.对于我正在使用的

Arrays.asList(Pattern.compile("/(").split(str))
Run Code Online (Sandbox Code Playgroud)

但我得到以下例外.

java.util.regex.PatternSyntaxException: Unclosed group near index 2
/(
Run Code Online (Sandbox Code Playgroud)

逃避'('似乎不起作用.

Spu*_*ley 92

两种选择:

首先,你可以使用转义斜线-\(

或者,因为它是一个单个字符,你可以把它放在一个字符类中,它不需要被转义 - [(]


Fer*_*azu 6

解决方案包括匹配左括号和右括号的正则表达式模式

String str = "Your(String)";
// parameter inside split method is the pattern that matches opened and closed parenthesis, 
// that means all characters inside "[ ]" escaping parenthesis with "\\" -> "[\\(\\)]"
String[] parts = str.split("[\\(\\)]");
for (String part : parts) {
   // I print first "Your", in the second round trip "String"
   System.out.println(part);
}
Run Code Online (Sandbox Code Playgroud)

用Java 8的风格写,这可以这样解决:

Arrays.asList("Your(String)".split("[\\(\\)]"))
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

我希望很清楚。

  • 对这里发生的事情的解释会改善这个答案。如果 OP 一开始不知道这样做,那么他们很可能也不会理解您的解决方案。一般来说,仅由代码或链接组成的答案不是好的答案 (3认同)

Kob*_*obi 5

  • 您可以使用反斜杠转义任何元字符,从而可以(与pattern 匹配\(
  • 许多语言都带有内置的转义功能,例如.Net Regex.Escape或Java。Pattern.quote
  • 某些样式支持\Q\E,并且它们之间有文字文本。
  • 有些口味(例如VIM)(从字面上匹配,并且需要\(捕获组。

另请参见:正则表达式基本语法参考