正则expression式匹配括号

在string中匹配'('的正则expression式是什么?

以下是scheme:

我有一个string

str = "abc(efg)"; 

我想在'('使用正则expression式分割string。对于我正在使用

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

但是我得到以下例外。

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

转义'('似乎不工作。

两个选项:

首先,你可以使用反斜杠 – \(

或者,由于它是一个单一的字符,你可以把它放在一个字符类,它不需要转义 – [(]

  • 你可以通过使用反斜杠来转义任何元字符,所以你可以匹配(使用模式\(
  • 许多语言都带有内置的转义函数,例如.Net的Regex.Escape或者Java的Pattern.quote
  • 一些风格支持\Q\E ,它们之间有文字文本。
  • 一些风格(例如VIM)匹配(字面上,并要求\(为了捕获组。

另请参阅: 正则expression式基本语法参考

解决scheme包含一个正则expression式模式匹配打开和closures括号

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

我希望很清楚。

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

因为(在正则expression式中是非常特殊的,所以你应该在匹配时避开它)。但是,根据你使用的语言,你可以很容易地匹配(使用string方法如index()或者其他方法, (有时候,有没有必要使用正则expression式。