【问题标题】:Regular Expression for matching parentheses匹配括号的正则表达式
【发布时间】:2011-08-03 18:17:06
【问题描述】:

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

以下是场景:

我有一个字符串

str = "abc(efg)";

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

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

但我得到以下异常。

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

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

【问题讨论】:

  • 你应该先学习Regex的基础知识:Wiki Regex or Regex Tuts or Regex for begginer
  • 试试Pattern.quote("("),或者干脆"\\("。请注意,有 2 个反斜杠 - Java 编译器额外的一个,以正确理解字符串。您的示例代码使用的是斜杠,而不是反斜杠。更重要的是,您可以简单地使用string.split...
  • "\(" 为我工作,感谢@Kobi。

标签: java regex


【解决方案1】:

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

【讨论】:

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

    另见:Regular Expression Basic Syntax Reference

    【讨论】:

      【解决方案3】:

      两种选择:

      首先,您可以使用 back 斜线对其进行转义 -- \(

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          我希望它很清楚。

          【讨论】:

          • 对这里发生的事情的解释将改善这个答案。如果 OP 一开始不知道这样做,他们很可能也不会理解您的解决方案。一般来说,仅由代码或链接组成的答案都不是好的答案
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-18
          • 2016-02-13
          • 2015-10-24
          相关资源
          最近更新 更多