正则表达式如何处理?

问题描述:

正则表达式如何处理?正则表达式如何处理?

+0

这需要更多的上下文。有许多不同的技术。 – 2009-07-31 20:46:16

+2

我认为你需要在这里更具体,除非你想得到像“电脑那样”的答案。 – 2009-07-31 20:47:12

正则表达式描述state machine的规则集。它通常一次移动一个字符串中的一个字符,根据前一个字符发生的情况以及正则表达式中的内容做出决定。

任何正则表达式也可以写成一个字符串一个字符的循环。其中一些可能相当简单,但正则表达式的功能可以在看起来像一个简单的正则表达式时找到,只需要一些反向和子组就可以在自己的状态机上重新生成一千行代码。

正则表达式可以被建模为Deterministic Finite State Machine。如果你想“处理”一个,这可能是一个很好的开始。

这个问题非常广泛。这不是一个完整的答案,但是Jeff Moser在他的博客上有一篇很好的文章,讲述了.NET的正则表达式过程:How .NET Regular Expressions Really Work

我怀疑其他答案会揭示正则表达式的其他区域,除非您的问题更新为更加详细一些。

这将取决于您所指的是哪种正则表达式实现。

有在正则表达式引擎使用2种共同但有不同的技术:

  1. Nondeterministic Finite State Machine
  2. Deterministic Finite State Machine

MSDN article解释了各种发动机实施了多项技术,然后接着解释说:.NET的实现以及为什么微软选择他们为.NET选择的东西。

他们会在您看到列出的各种文章here中更加深入。

尽管每个人都在这里说,有关国家机器,你可以使用递归若干技术问题探讨用很少的状态写一个非常简单的正则表达式识别器。 Brian Kernighan的两本书中的软件工具Pascal和The Practice Of Programming中都有这些例子。