在工作过程中,我们需要使用模式匹配来表达用户定义的条件。
这样的模式条件是很多的, 大约几十万。
单个模式条件支持什么功能? 需求是无止境的。我们先是定义了一个简单的格式,属于类似正则,但是丢弃了一些复杂的功能。
随着时间的推移,客户要求越来越多,最后就是能不能支持"所有"的正则功能?
汇总起来,我们的需求如下:
开发一个引擎,支持至少几十万级别的正则条件高效匹配。
单个正则要求支持:
普通文字 : 用来匹配普通字符
转义符 \ \d \D \w \W \n \s \S \b \B \x \u: 常用的转义字符
字符集 . [xxx] [^xxx] : 字符范围
unicode 属性 \p{XXX} \P{xxx}; 在unicode 规范中类别为 XXX的字符或类别不是XXX的字符
重复 * + ? , {m,n} ,包括非贪婪的?
分支选择 |
分组 与分组捕获 () (? )
0宽度环视 :(?=X )(?!X) (?<=X) (?<!X)
anchor: ^ $
扩展:
<A,B> 整数范围: 用来匹配范围在A B间的整数
<NAME> 命名子串: 用来包括一个名称为 NAME 的子正则
\h{XX} 动态hook: 用来在回调中动态判断该位置是否匹配
额外需求:
提供Java SDK