公司项目中有个需求是列表中匹配到和输入框中文字相同的部门变色,所以实现时使用了正则表达式匹配,使用SpannableString实现变色。
String patten = "" + keyWord;
Pattern p = Pattern.compile(patten);
Matcher m = p.matcher(str);
需求实现了,测试也没啥问题,然后上线了,后来在查看统计的错误日志时才发现,执行这句
Pattern p = Pattern.compile(patten);
出现了异常:Incorrectly nested parentheses in regexp pattern near index 1,大致意思是“在索引1位置附近发现括号嵌套的语法。
熟知正则表达式语法的都应该知道,括号是特殊字符,都是成对出现的,所以单独的一个"("是错误的表达式,也怪不得会报错了。就是奇怪的怎么会有人会再客运站筛选框里输入括号,郁闷归郁闷,问题还是要解决的。
解决的这个问题的办法也非常简单,就是使用Pattern的Pattern.quote方法,此方法的作用就是把字符串转成普通字符串,不在被当做正则表达式。
String patten = Pattern.quote("" + keyWord);
Pattern p = Pattern.compile(patten);
Matcher m = p.matcher(str);
quote方法的具体作用可以参考下这篇文章:
Java正则表达式Pattern.quote()方法详解 https://blog.csdn.net/yin380697242/article/details/52050023
如果有其它疑问可以留言。