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