您的位置 首页 java

pattern匹配和不匹配执行效率天差地别,JAVA的正则表达式慎用

为了做到通用性,计划用正则表达式去匹配。

 ^2[0-9]{7}_(.*){1,}_USER_[0-9]{4}.(xls|xlsx)$  

目录下都满足条件还好,很快匹配上了。

 20200512_0011_USER_0001.xls
20200512_0011_USER_0002.xls
20200512_0011_USER_0003.xls  

但是运行一段时间,发现应用卡住半小时才执行完文件名匹配任务。

发现目录下还有其他文件,为啥会这么耗时呢?

sysout测试一下,发现条件不匹配正则表达式时,程序卡住不动了!!

顺便推荐个插件: devutils

base64编解码,Regex匹配,DigestUtil各种MD5/sha算法加密,URLCodec,socketClient,socketServer创建等

再也不用各种在线转换了!

 System.out.println("20200530_m-12321300111M-123_PROD_0001.xlsx"
                   .matches("^2[0-9]{7}_(.*){1,}_USER_[0-9]{4}.(xls|xlsx)$"));  

还在这卡着呢!!

网上搜了半天,有人说正则表达式的效率较低,但是不用正则还有什么办法呢?!

试着把正则表达式写得不要那么严格点,效率正常了。

 ##原来的正则表达式
^2[0-9]{7}_(.*){1,}_USER_[0-9]{4}.(xls|xlsx)$
##新的正则表达式
^2[0-9]{7}_[\w|-]{1,}_USER_[0-9]{4}.(xls|xlsx)$  

通过比对,发现第二段匹配单号条件写为(.*),在文件名不匹配的时候,单号越长,匹配效率越差。

在明确写为[\w|-]之后,只匹配字母/数字/减号,效率提高很多。

看来针对不匹配模式,如果字符串复杂度或者长度越长,表达式越模糊,执行效率越差。

文章来源:智云一二三科技

文章标题:pattern匹配和不匹配执行效率天差地别,JAVA的正则表达式慎用

文章地址:https://www.zhihuclub.com/185655.shtml

关于作者: 智云科技

热门文章

网站地图