支持 并、交、差 的正则表达式引擎
先强调一点,在我的引擎中,所有正则表达式的语法结构,包括 并、交、差、补 都是在编译时完成的,对匹配性能无任何影响,切记!…… 现在可以开始了:
正则表达式,描述的是正则语言, 学过形式语言与自动机理论的人应该都知道,正则语言在并、交、差、补运算下都是封闭的;但是,根据 Wikipedia 的描述,到目前为止,还没有任何一个已知的正则流派(Flavor)将交和差纳入正则语法。理论与实践之间竟然隔着这么巨大的鸿沟!
并: | A || B | 能匹配 A 或者能匹配 B | 这三种操作都可以编译为 DFA, 从而非常高效地执行匹配 |
---|---|---|---|
交: | A && B | 能匹配 A 并且能匹配 B | |
差: | A &! B | 能匹配 A 但不能匹配 B,即从 A 中排除 B |