精通正则表达式八:多选结构是匹配优先还是忽略优先

来源:互联网 发布:软件开发java 编辑:程序博客网 时间:2024/06/05 14:39

记得在前面测试引擎的类型的时候用正则表达式‘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])

这里写图片描述