Java 正则表达式使用()搜索指示组的实例

Java 正则表达式使用()搜索指示组的实例,java,regex,escaping,Java,Regex,Escaping,我想在(和)之间把东西拿回来 但是()用于组,通过转义\n我得到错误: 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(西欧罗巴(佐默蒂德)) 2010年10月12日星期二03:10:22+0200(CEST) 2010年10月1

我想在(和)之间把东西拿回来

但是()用于组,通过转义\n我得到错误:

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(西欧罗巴(佐默蒂德))

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)

您需要退出退出:

"(\\(.*?\\))"
注意,我还使用了“匹配任何内容”的非贪婪版本


双转义是因为在字符串文字中,反斜杠用于转义序列(如
\n
),因此,如果要在字符串中使用反斜杠,则需要使用另一个反斜杠进行转义。

需要转义:

"(\\(.*?\\))"
注意,我还使用了“匹配任何内容”的非贪婪版本


双转义是因为在字符串文字中,反斜杠用于转义序列(如
\n
),因此,如果要在字符串中使用反斜杠,则需要使用另一个反斜杠进行转义。

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

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

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

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

您还需要避开反斜杠;而且我认为您希望在不同的位置(最好更具体地说明您想要匹配的内容):

说明:

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

您还需要避开反斜杠;而且我认为您希望在不同的位置(最好更具体地说明您想要匹配的内容):

说明:

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

如果输入数据不是很好(例如,对于
foo(bar(boo)hoo)
您将匹配
(bar(boo)
),非贪婪仍然会给您带来意外的结果。如果输入数据不是很好(例如,对于
foo(bar(boo)hoo)
您将匹配
(bar(boo)
).1嵌套时,此表达式正确匹配所有“最里面”的匹配圆括号。(当插入括号时,惰性点星版本失败。)此表达式在(西欧罗巴(zomertijd))上出错但是感谢您的解释!对。如果您总是想捕获最外面的一对括号,并且如果在同一嵌套级别上没有超过一对的括号,那么
*
而不是
[^()]*
更好。但只有这样,+1此表达式才能正确匹配所有“最里面的”当括号嵌套时匹配括号。(当括号未对齐时,懒点星版本失败。)这一个在(西欧罗巴(zomertijd))上出错但是感谢您的解释!对。如果您总是想捕获最外面的一对括号,并且如果在同一嵌套级别上没有超过一对括号,那么请使用
*
而不是
[^()]*
更好。但只有这样。谢谢,这件很好用,西迪尔的那件也很好。谢谢,这件很好用,西迪尔的那件也很好用。