【发布时间】:2013-09-14 18:13:04
【问题描述】:
我有大量的正则表达式在匹配时调用特定的 http 处理程序。一些较旧的正则表达式无法访问(例如a.c* ⊃ abc*),我想修剪它们。
有没有给出两个正则表达式的库会告诉我第二个是否是第一个的子集?
一开始我并不确定这是否可以确定(它闻起来像是一个不同名称的停机问题)。但事实证明it's decidable。
【问题讨论】:
-
不完全确定我理解 - 你是说你有两个正则表达式
a.c*和abc*吗?你不想破译它们是否相同或部分相同?还是a.c* ⊃ abc*是一个完整的正则表达式?因为我以前从未见过这种符号 -
⊃ 表示严格的超集,我可能应该使用更常见的 ⊇。我想说
abc*接受的每个字符串也被a.c*接受 -
您对正则表达式的定义是什么?在大多数编程语言中,通常允许反向引用的正则表达式语法比正则语言更强大。所以包含的可判定性甚至不清楚......
-
在这种情况下,我的意思是正确的正则表达式。我正在使用 RE2 库,它只实现可以直接映射到正确正则表达式的常见正则表达式功能。
-
更正,它闻起来相当 EXPSPACE-complete ;) en.wikipedia.org/wiki/EXPSPACE
标签: regex regular-language halting-problem