regex - 汤普森算法的否定?

标签 regex algorithm state-machine nfa

我读这篇文章是为了学习如何为正则表达式编写状态机

https://en.wikipedia.org/wiki/Thompson%27s_construction

但是我只看到并集,串联,Kleene star之类的东西,而没有看到这里提到的否定

https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton#Closure_properties

它的结构是什么?

最佳答案

Thompson 自动机非常不适合否定:它不是确定性的并且实际上使用了大量的自发转换(这也是不确定性的来源)。相反,Brzozowski automaton非常适合取反、交集以及更普遍的所有 bool 函数。

您可以使用 Vcsn 来尝试类似的结构。它实际上什至支持加权表达式和更多的运算符。 This page包含几个示例,展示如何将扩展的正则表达式转换为自动机。

Redgrep实现 Brzozowski 方法。在 this very nice video设计师解释了这是如何工作的。

关于regex - 汤普森算法的否定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38544032/

相关文章:

c# - 希伯来语、英语、符号的正则表达式

ajax - 如何在ajax请求中使用jmeter

php - preg_match 字符串中的数组项?

c# - 在 C# 或 VB.NET 中使用 'System.Activities.Statements.StateMachine' 类的示例

r - 用于删除所有包含 R 中数字的单词的正则表达式

php - preg_replace 使用模式作为替换数据数组的索引

c++ - 不使用 sqrt 函数求平方根?

javascript - 具有多个参数的客户端预测搜索相关性计算

ios - 如何使用 GKStateMachine 的状态传递参数

c - 限制有限状态自动机字符串匹配的字母表