要判断输入文本匹配了多个正则中的哪个(或哪些),不需要逐个判断, 扫描一遍就得到结果。
正则表达式的 并、交、差、连接、重复 任意组合;有一些引擎支持的环视功能可以认为是 交、差 的一个受限子集,很多不严肃的论断认为环视功能无法用 DFA 实现,误导了很多人。
google re2 基于严格的自动机理论,性能上远远超越了其他引擎;其中 re2.set 是一个多正则引擎,性能相当好,但内存消耗很大。功能上,re2不支持交和差,其他正则引擎(perl,pcre)则以环视(re2也不支持)的方式实现部分交和差的功能(效率很低)。
我的引擎 对于自动机理论的应用更加彻底,更加全面,代码上也仔细优化,从而:
10万个正则,待匹配文本平均长度30字节,判断出匹配了哪个(或哪些),平均耗时3微秒,内存消耗90M
re2.set 在相同的测试中,平均耗时110微秒,内存消耗2G
实现并交差时,为了便于调试,我做了下面这个图形化页面,同时,这也是一个很好的演示页面, 在新窗口中打开该页面