这是一个练习项目,用语法树遍历、NFA遍历、DFA遍历,实现了以下正则表达式的匹配
* \d 数字[0-9]
* \D 非数字
* \w 单词 数字字母下划线 [0-9a-zA-Z_]
* \W 非单词
* \s 空白 [ \t\r\n\f\v]
* \S 非空白
* [abc] 字符集
* [^abc] 逆字符集
* [a-g] 区间字符集
* X{m} 量词 m个X,贪婪
* X{m,n} m-n个X,贪婪
* X{m,} 至少m个X,贪婪
* () 分组并捕获
* | 或 'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"
* . 任意字符,不含\n
* X* 任意多个X {0,} 贪婪 A\s*=\s*B
* X+ 至少一个X {1,} 贪婪
* X? 0到1个X {0,1} 贪婪
更详细的说明看这篇文章:https://zhuanlan.zhihu.com/p/675721772