正则表达式use()搜索而不是指示组

时间:2011-12-24 11:53:26

标签: java regex escaping

我想把这些东西放回(和)之间。

但是()用于组,并且使用escape \ i得到错误:

Pattern p = Pattern.compile("(\(.*\))");

意外的字符:'('

我该如何防止这种情况?

  

2010年10月13日星期三20:00:11 +0200(CEST)

     

2010年10月12日星期二21:27:48 +0200(CEST)

     

2010年10月12日星期二04:44:57 +0200(西欧(zomertijd))

     

2010年10月12日星期二03:10:22 +0200(CEST)

     

2010年10月11日星期一23:10:04 +0200(CEST)

     

2010年10月11日星期一20:56:27 +0200(CEST)

(我用过java)

3 个答案:

答案 0 :(得分:2)

你还需要逃避反斜杠;我也认为你希望逃避在不同的位置(更好地说明你想要匹配的东西):

Pattern p = Pattern.compile("\\(([^()]*)\\)");

<强>解释

\\(     # literal (
(       # start capturing group
 [^()]* # any number of characters except parentheses
)       # end capturing group
\\)     # literal )

答案 1 :(得分:1)

你需要逃脱逃脱:

"(\\(.*?\\))"

请注意,我还使用了“匹配任何东西”的非贪婪版本。

双重转义是因为在字符串文字中,反斜杠用于转义序列(如\n)所以如果你想在字符串中使用反斜杠,则需要用另一个反斜杠转义它。

答案 2 :(得分:1)

在Java字符串中,您必须转义'\\'字符,请尝试:

Pattern p = Pattern.compile("(\\(.*\\))");