1. 程式人生 > >精通正則表示式八:多選結構是匹配優先還是忽略優先

精通正則表示式八:多選結構是匹配優先還是忽略優先

記得在前面測試引擎的型別的時候用正則表示式‘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])

這裡寫圖片描述