匹配括号
正则表达式什么是匹配字符串中的正则表达式“(”匹配括号
以下是该方案:
我有一个字符串
str = "abc(efg)";
我想分割在'('
使用正则表达式的字符串。对于我正在使用
Arrays.asList(Pattern.compile("/(").split(str))
但我得到以下例外。
java.util.regex.PatternSyntaxException: Unclosed group near index 2
/(
转义'('
似乎不工作。
两个选项:
首先,你可以用一个反斜杠转义 - \(
或者,因为它是一个单一的字符,你可以把它放在一个字符类,它不需要转义 - [(]
[(]为'sed'做伎俩] – rodowi 2014-04-11 02:08:22
对于任何特殊字符,您应该使用'\'。 所以,匹配括号 - 。/ \(/
- 您可以通过使用一个反斜杠逃脱任何元字符,这样你就可以与模式匹配
(
\(
- 许多语言都配备了建设 - 逃脱的功能,例如,NET的
Regex.Escape
或Java的Pattern.quote
- 一些香精支持
\Q
和\E
,它们之间的文字文本。 - 一些香精(VIM,例如)匹配01从字面上看,,并要求
\(
捕获组。
因为(
在正则表达式中是特殊的,所以哟你应该在匹配时跳过它\(
。但是,根据您使用的语言,您可以轻松地将(
与字符串方法(如index()
)或其他方法相匹配,以便您找到(
所在的位置。有时,不需要使用正则表达式。
该解决方案由一个正则表达式匹配打开和关闭括号中的Java 8的风格
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);
}
写作,这可以通过这种方式来解决:
Arrays.asList("Your(String)".split("[\\(\\)]"))
.forEach(System.out::println);
我希望这是显而易见的。
关于发生了什么事的解释如果OP不知道这样做的话,他们可能也不会理解你的解决方案,一般来说,只包含代码或链接的答案不是很好的答案 – Totem 2015-05-08 00:35:23
您使用哪种语言? – Kobi 2011-04-12 10:11:41
我正在使用Java – Ammu 2011-04-12 10:40:13
尝试使用'Pattern.quote(“(”)'或简单地使用'“\\(”'。注意,有两个反斜杠 - 为Java编译器增加一个反斜杠,以正确理解字符串。您的示例代码使用斜杠,而不是反斜杠。更重要的是,你可以简单的使用'string.split' ... – Kobi 2011-04-12 10:57:51