给定一个描述正则语言的正则表达式R(没有花哨的反向引用)。有没有一种算法方法来构造一个正则表达式R*来描述除R描述的所有单词的语言吗?正如维基百科所说,这应该是可能的:
正则语言在各种运算下是封闭的,也就是说,如果语言K和L是正则的,那么以下运算的结果也是:[…] 补码¬L
例如,给定字母表{a,b,c} ,语言(abc*)+的逆是(a|(ac|b|c).*)?
正如 DPenner 在评论中已经指出的那样,正则表达式的逆可以比原始表达式大得多。这使得反转正则表达式不适合实现用于搜索目的的否定部分表达式语法。是否有一种算法可以保留正则表达式匹配的O(n*m)运行时特性(其中n是正则表达式的大小,m是输入的长度)并允许否定子表达式?