正则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式。