2015-10-26 51 views
0

当我尝试将此转换“(| {|;)”正则表达式的字符串,Java的给了我这样的例外:为什么'{'在这个正则表达式中不被接受?

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 2 
(|{|;) 
^

我该如何解决呢?

+2

通过将'{'与'['和']':'[{]'括起来。如果你需要匹配一个空格,或者一个大括号或一个';',把它们全部添加到字符类中:'[{;]' –

+3

看到表达本身就像看堆栈跟踪一样有用 – SomeJavaGuy

+0

谢谢stribizhev –

回答

5

错误与{被视为限制量词的开始(例如{1,2})。您需要将其转义或在角色类中使用。

用正则表达式判断你有 - (|{|;) - 问题出在特殊的正则表达式处理上。既然你想要匹配一个空格,一个大括号或一个分号,建议使用一个字符类而不是一个替换组。

因此,使用

([ {;]) 

字符类是一个更好的解决方案,交替,因为它涉及较少的回溯。

+0

I猜测你正在分裂,否则,删除圆括号(捕获组)。 –

相关问题