正则表达式的复杂性是什么?

时间:2010-12-07 15:38:57

标签: regex complexity-theory big-o

对字符串执行正则表达式比较所需的字符串长度的复杂性是什么?

4 个答案:

答案 0 :(得分:54)

答案取决于“正则表达式”究竟是什么意思。经典正则表达式可以是compiledDeterministic Finite Automata,可以在N时间内匹配长度为O(N)的字符串。正则表达式语言的某些扩展会改变这种情况。

您可以找到以下感兴趣的文件:Regular Expression Matching Can Be Simple And Fast

答案 1 :(得分:8)

unbounded - 您可以在空输入字符串上创建一个永不终止的正则表达式。

答案 2 :(得分:6)

如果你使用普通(TCS:没有反向引用,连接,交替,Kleene星)regexp和regexp已经编译,那么它是O(n)。

答案 3 :(得分:1)

如果你在RegEx上寻找紧密的渐近边界(不考虑表达式本身),那么就没有。正如亚历克斯指出的那样,你可以创建一个正则表达式,即O(1)或正则表达式,即欧米茄(无穷大)。作为一种纯粹的数学算法,正则表达式引擎太复杂,无法执行任何形式的渐近分析(除了这样的分析基本上没有价值的事实)。

特定表达式的增长率(因此,实际上构成一种算法,无论如何)将更有意义,但不一定更容易分析。