regex - 是否存在可以确定一种常规语言是否匹配任何输入,另一种常规语言匹配的算法?

标签 regex computer-science theory

假设我们有正则表达式:


你好W. * rld
你好,世界
。*世界
。* W. *


我想减少匹配任意输入所需的正则表达式的数量。

为此,我需要查找一个正则表达式是否与另一个表达式匹配的任何输入匹配。那可能吗?

比利3

最佳答案

任何正则表达式都可以链接到DFA-您可以最小化DFA,并且由于最小形式是唯一的,因此您可以决定两个表达式是否等效。 Dani Cricco指出了Hopcroft O(n log n)算法。 Hopcroft和Craft还有另一种改进的算法,可以测试O(n)中两个DFA的等效性。

为了对此问题进行一个很好的调查并找到一种有趣的方法,我推荐arXiv的论文Testing the Equivalence of Regular Languages

以后的编辑:如果您对正则表达式的包含而不是等价感兴趣,我遇到了一篇可能感兴趣的论文:Inclusion Problem for Regular Expressions-我只浏览了一下,但似乎包含解决该问题的多项式时间算法。

关于regex - 是否存在可以确定一种常规语言是否匹配任何输入,另一种常规语言匹配的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3630203/

相关文章:

algorithm - 在 O(V + E) 中验证 Dijkstras 算法

haskell - 为什么从Int到Int只有一个非严格函数?

php - 使用自定义对象创建接口(interface)函数

language-agnostic - 计算图的传递闭包所需的渐近运行时间?

用于排除重复单个字符的正则表达式

PHP 如何预匹配这个字符串?

regex - 带有非拉丁字符的 Golang 正则表达式

java - 在 Java 中创建方法并测试类

algorithm - 如何创建复杂度为 O(1) 的集合

Java如何替换反斜杠?