java - 近似正则表达式等价

标签 java regex

理论上,正则表达式等价是一个具有指数空间和时间复杂度的朴素解决方案的难题。但出于实际目的,正则表达式是否有近似等价的度量?

我正在考虑从第一个正则表达式生成随机字符串,然后对照另一个正则表达式进行检查,然后以其他方式重复它。有更优雅的检查吗?

相关链接:

PS:我想用 java 编写该方法,但欢迎一般解决方案和想法。

最佳答案

我认为你的解决方案不会完美地工作。

假设您想比较 ".*1"".*2" 等正则表达式, 使用你的天真的算法,它将继续执行而不会停止。

最好使用 NFA ,并将两个正则表达式最小化。

如果您达到类似的 DFA ,那么您可以比较这两个正则表达式。

引用this DFA 等价。

我可以建议的另一种方式:

假设让 S1S2 为要比较的正则表达式。 据我所知 S1 将产生一种语言 L1 (由 S1 产生的字符串集), 并且 S2 将产生一种语言 L2

我们可以检查两种语言的等效性。

引用Deciding equivalence of regular languages 了解更多详情。

关于java - 近似正则表达式等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20902342/

相关文章:

java - 从字符串中删除控制、隐藏、不需要的字符

java - 正则表达式:只允许值一次

java - 从 Java 应用程序在 hadoop 2.2 (Yarn) 上启动 mapreduce 作业

java - 如何使用 JSOUP 绕过 cloudflare ddos​​ 或 5 秒后重定向?

python - 未能捕获第一个单词组

python - 如何在 python 中将文本文件分段?

Java - Enumerable.Cast() 像 C#?

java - ListView - 如何正确配置单元格的显示?

java - 硬件的Java编译器错误

r - 查找以 alpha 开头的字符串,但多个特定字符除外