版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/StriverLi/article/details/78032458
记得在前面测试引擎的类型的时候用正则表达式‘nfa|nfa not’来匹配文本‘nfa not’,因为DFA和POSIX NFA不支持忽略优先量词,所以如果匹配到的是‘nfa’,则是NFA:
对于NFA而言,会逐个按顺序尝试多选结构的分支,哪个先匹配到返回的就是哪个:
对于DFA而言,却总是返回匹配长度最长的文本:
test.txt中的文本是‘nfa not’,其实这也跟它的文本主导的特性有关。
有序多选结构的陷阱
如果需要匹配‘Jan 31’之类的文本,可能需要这样:
Jan (0?[1-9]|[12][0-9]|3[01])
但这样会带来一个问题:
这是就需要调整分支的位置:
Jan ([12][0-9]|3[01]|0?[1-9])