这几个月在做一些关于大量数据使用正则匹配的事,程序语言是Delphi,但是正则表达式模块是perl的,所以基本上所有语言的正则都可以按照一下几点优化。
首先,你的正则表达式尽量少开匹配模式,delphi中有roIgnoreCase, roSingleLine等等,这些在一定程度上会加重CPU负担,大小写在不必要的情况下,还是关了忽略大小写比较好。
再者就是尽量避免使用含有.点之类的重复匹配,而采用更精确的比如\d \w等,举个例子 aabbcc123aass
cc(.+?)aa 和cc(\d{3})aa,后者会比前者更有优势,为什么呢?因为越是提前否定某个字符串是否匹配,效率越高。也就是更早的发现不匹配的,然后跳过。
最后就是尽可能规避冗长的正则表达式,而采用分段,或者精简的做法,这种有点类似第二点,尽早发现不匹配的就忽略。
以上经验可能在其他地方不适用,仅供参考。