Java 正则表达式使用()搜索指示组的实例
我想在(和)之间把东西拿回来 但是()用于组,通过转义\n我得到错误: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
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))上出错但是感谢您的解释!对。如果您总是想捕获最外面的一对括号,并且如果在同一嵌套级别上没有超过一对括号,那么请使用*
而不是[^()]*
更好。但只有这样。谢谢,这件很好用,西迪尔的那件也很好。谢谢,这件很好用,西迪尔的那件也很好用。