正则表达式报错 PatternSyntaxException Unclosed group near index

源代码如下:

public static void main(String[] args) throws Exception {
	System.out.println("(abc)".replaceAll("(", ""));
}

报错信息如下:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 1
(
 ^
	at java.util.regex.Pattern.error(Pattern.java:1713)
	at java.util.regex.Pattern.accept(Pattern.java:1571)
	at java.util.regex.Pattern.group0(Pattern.java:2533)
	at java.util.regex.Pattern.sequence(Pattern.java:1806)
	at java.util.regex.Pattern.expr(Pattern.java:1752)
	at java.util.regex.Pattern.compile(Pattern.java:1460)
	at java.util.regex.Pattern.<init>(Pattern.java:1133)
	at java.util.regex.Pattern.compile(Pattern.java:823)
	at java.lang.String.replaceAll(String.java:2189)
	at com.travelsky.tdp.pkgStock.view.interceptor.Test.main(Test.java:5)

从报错信息看,是由‘(‘字符引起的。

从网上查找类似问题,找到了解决方法,解决方法很简单,对于字符‘(‘,使用 \\( 或 [(] 即可。

参考:http://blog.csdn.net/happysykl/article/details/7407935

但是博主只是说了解决方法,却没有说明其中的道理。

本着对代码负责的态度,继续查阅Java API,从中知道:

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

为了验证以上猜测是否正确,可以使用以下代码进行验证:

public static void main(String[] args) throws Exception {
	System.out.println("(abc)".replaceAll("()", ""));
}

代码正确执行,说明测试是正确的。

回头看看,发现只要肯刨根问底,就会找到答案。

时间: 2024-10-06 00:06:05

正则表达式报错 PatternSyntaxException Unclosed group near index的相关文章

报错: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

描述:使用Hibernate登陆验证时故意输入没有的用户名,所产生的错误. 错误代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /*      * 根据客户的用户名查找客户信息      */     @Override     public User getUserByUserName(String userName) {         String hql="from User where userName=?";         Session s

Django 找不到模版报错&quot; django.template.exceptions.TemplateDoesNotExist: index.html&quot;

解决办法:在setting.py的TEMPLATES‘DIRS'[]加入模版路径 os.path.join(BASE_DIR, 'templates') TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], #os.path.join(BASE_DIR, 'templates')没了这句, # 会显示d

sql注入--基于报错的注入

这是经典的sqli-labs 中的less-5 问题首先通过几个常见的进行测试, 发现只要正确的话就会输出you are in.... 并不能绕过,因此不能出现敏感信息,因此要用一种新思路(参考白帽学院的教程)基于报错的注入,如图,在数据库上测试,产生报错 http://localhost/sqlilabs/Less-5/index.php?id=3' and (select 1 from(select count(*),concat(0x3a,0x3a,database(),0x3a,0x3a

go thrift报错问题--WriteStructEnd

问题 go thrift开发过程中,多个goroutine共用一个client时,报错: panic: runtime error: index out of range goroutine 24 [running]: happy-apple/vendor/git.apache.org/thrift.git/lib/go/thrift.(TCompactProtocol).WriteStructEnd(0xc4201086e0, 0x0, 0x0) /home/admin/workspace/s

nuxt.js 初始化 npm run dev 报错

在初始化 npm install 了基本依赖后: npm run dev 报错: error in ./server/index.js Module build failed: Error: Plugin/Preset files are not allowed to export objects, only functions. In C:\Users\L\Desktop\Nuxt\nuxt-learn\node_modules\backpack-core\babel.js at create

报错:org.apache.jasper.JasperException: /index.jsp (line: 1, column: 17) equal symbol expected

现象:写了如下一个jsp文件,导入需要用到的两个包: 运行结果报错:org.apache.jasper.JasperException: /index.jsp (line: 1, column: 17) equal symbol expected at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41) at org.apache.jasper.compiler.ErrorDis

Exception in thread &quot;main&quot; java.util.regex.PatternSyntaxException: Unclosed character class near index 0 [ ^

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 0 [ ^ 出现此错误应该是字符转义出现问题: System.out.println(str.replaceAll("[", "22")); 解决方案:在[之前加上\\ System.out.println(str.replaceAll(&qu

mysql 启动报错 “mysql-bin.index not found (Errcode: 13)“

安装好mysql数据库后,直接在安装的目录下 /usr/local/mysql  下新建了一个目录data 用于存放数据,建好后,直接去启动数据库,发现启动不了,出现如下报错: mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data /usr/local/mysql/libexec/mysqld: File './mysql-bin.index' not found (Errcode: 13) [E

eclipse里index.jsp头部报错的原因和解决方法

index.jsp的头<%@这句报错的话,是因为没有引入Tomcat的原因. 解决: A:Window---Preferences---server---RuntimeEnviroments--Add--Apache中选择对应版本的汤姆猫---引入外部汤姆猫的安装目录 B:对着工程---右键---Build Path---Configure Build Path---Libraries---Add Library---    Server Runtime---选中汤姆猫即可!