DFA

DFA(確定性有限自動機)引擎由輸入驅動

原理

該演算法掃描輸入字串一次,並記住正規表示式中可能匹配的所有可能路徑。例如,當在模式中遇到交替時,建立兩個新路徑並獨立嘗試。當給定路徑不匹配時,將從可能性集中刪除它。

啟示

匹配時間受輸入字串大小的限制。沒有回溯,引擎可以同時找到多個匹配,甚至重疊匹配。

與 NFA 引擎型別相比,此方法的主要缺點是引擎可支援的減少的功能集。

a(b|c)aabadaca 相匹配:

abadaca      a(b|c)a
^            ^        Attempt 1      ==> CONTINUE

abadaca      a(b|c)a
 ^           ^        Attempt 2      ==> FAIL
               ^      Attempt 1.1    ==> CONTINUE
                 ^    Attempt 1.2    ==> FAIL

abadaca      a(b|c)a
  ^          ^        Attempt 3      ==> CONTINUE
                   ^  Attempt 1.1    ==> MATCH

abadaca      a(b|c)a
   ^         ^        Attempt 4      ==> FAIL
               ^      Attempt 3.1    ==> FAIL
                 ^    Attempt 3.2    ==> FAIL

abadaca      a(b|c)a
    ^        ^        Attempt 5      ==> CONTINUE

abadaca      a(b|c)a
     ^       ^        Attempt 6      ==> FAIL
               ^      Attempt 5.1    ==> FAIL
                 ^    Attempt 5.2    ==> CONTINUE

abadaca      a(b|c)a
      ^      ^        Attempt 7      ==> CONTINUE
                   ^  Attempt 5.2    ==> MATCH

abadaca      a(b|c)a
       ^       ^      Attempt 7.1    ==> FAIL
                 ^    Attempt 7.2    ==> FAIL