在字符串中匹配'('的正则表达式是什么?
以下是该场景:
我有一个字符串
str = "abc(efg)";
我想使用正则表达式将字符串拆分为'('
。因为我正在使用
Arrays.asList(Pattern.compile("/(").split(str))
但我得到以下例外。
java.util.regex.PatternSyntaxException: Unclosed group near index 2
/(
转义'('
似乎不起作用。
答案 0 :(得分:87)
两个选项:
首先,你可以使用 back 斜杠来逃避它 - \(
或者,因为它是单个字符,您可以将它放在一个不需要转义的字符类中 - [(]
答案 1 :(得分:5)
(
与模式匹配
\(
。 Regex.Escape
或Java的Pattern.quote
\Q
和\E
,并在它们之间加上文字文字。(
,并且需要\(
来捕获组。答案 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()
等字符串方法或其他方法匹配,以便您找到(
所处的位置。有时候,没有必要使用正则表达式。