匹配括号的正则表达式

时间:2011-04-12 10:06:56

标签: java regex

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

以下是该场景:

我有一个字符串

str = "abc(efg)";

我想使用正则表达式将字符串拆分为'('。因为我正在使用

Arrays.asList(Pattern.compile("/(").split(str))

但我得到以下例外。

java.util.regex.PatternSyntaxException: Unclosed group near index 2
/(

转义'('似乎不起作用。

5 个答案:

答案 0 :(得分:87)

两个选项:

首先,你可以使用 back 斜杠来逃避它 - \(

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

答案 1 :(得分:5)

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

另请参阅:Regular Expression Basic Syntax Reference

答案 2 :(得分:3)

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

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);
}

用Java 8的风格书写,这可以用这种方式解决:

Arrays.asList("Your(String)".split("[\\(\\)]"))
    .forEach(System.out::println);

我希望很清楚。

答案 3 :(得分:2)

对于任何特殊字符,您应该使用'\'。 因此,对于匹配的括号 - / \(/

答案 4 :(得分:1)

因为(在正则表达式中很特殊,所以在匹配时应该将其\(转义。但是,根据您使用的语言,您可以轻松地将(index()等字符串方法或其他方法匹配,以便您找到(所处的位置。有时候,没有必要使用正则表达式。