字符串replaceAll()方法报错:java.util.regex.PatternSyntaxException:Unclosed group near index...

Unclosed group near index错误

之前自己写的一个模块在项目上线后最近频频出现tomcat崩掉的情况,从log看出现如下的报错信息:

java.util.regex.PatternSyntaxException: Unclosed group near index 85
\\u521B\\u4E1A\\u5927\\u53A6(\\u6D59\\u6C5F\\u897F\\u6EAA\\u6821\\u533A\\u65C1\\uFF09
at java.util.regex.Pattern.error(Pattern.java:1955)
......

从报错信息可以看出是正则出问题了,具体什么问题通过搜索发现是如下原因导致的:

在正则表达式中,有个“捕获组”的概念,其使用了小括号;因此分析,当正则表达式解析到左括号时,没有发现对应的右括号,从而报错。

  如上报错信息中的红色左括号,就是导致问题的地方,右括号是红色的对应的unicode编码(\\uFF09),这种情况也是没有预料到的,对于这个我的解决的办法就是把左括号替换成对应的unicode编码,或者直接替换成空字符串、成对的左右括号都是可以的,具体看情况而言。

  而且对于中括号[],也存在同样的问题,需要注意。

正则中的转意符"\"在Java语言中的表示

  因为"\"在正则表达式中是转意符,在需要描述一个已经被正则表达式使用的特殊字符(即元字符,如^、$、*、+、?等)时,使用"\"将其转变为原本的意思,如果要表示反斜杠本身,如果是写成正则表达式,在需要写成"\\\\",如果是普通字符串,写成"\\"即可。

...希望今天搬砖是顺利的一天...^_^

 

参考文献:https://blog.csdn.net/wangjunjun2008/article/details/39479423

posted on 2018-06-06 09:23  木瓜芒果  阅读(2330)  评论(0编辑  收藏  举报