有没有一个程序或方法自动将ab | ac | an | db | df改为(a(b | c | n)| d(b | f))

时间:2016-12-02 01:03:24

标签: regex optimization

不是测试所有的或者语句,而是查看第一个字符是否匹配。标题解释了这一切。

1 个答案:

答案 0 :(得分:1)

处理正则表达式时,它首先转换为非确定性有限状态自动机(NFA)。然后,NFA被转换为确定性有限状态自动机(DFA),其通常导致更多数量的状态。第三步是将DFA转换为具有最少状态数的“最小”DFA。 当且仅当它们导致相同的最小DFA时,两个正则表达式是等效的。因此,明显等效的两个正则表达式ab|ac|an|db|df(a(b|c|n)|d(b|f))会产生相同的最小DFA,并将以相同的速度执行模式匹配。没有特别的理由偏爱一个而不是另一个。