如何找到接受序列的最短正则表达式?

时间:2012-08-07 10:01:36

标签: regex sequence

我正在寻找一种方法来找到接受序列的最小可能的正则表达式。

为了让它变得有趣我不想要任何星星(Kleene星星),最好不要使用通配符?

例如序列:'aaaaaaa'将被'a ^ 8'接受,^ 8将是接受序列的最短表达式。

是否有人知道如何生成这样的表达式?

2 个答案:

答案 0 :(得分:2)

随着字符串的增长,您所追求的内容的搜索空间很可能呈指数级增长,因为通常会有大量可以匹配给定字符串的常规模式。

我认为在您的情况下,您可以尝试使用某些search heuristic来尝试近似甚至设法找到最佳解决方案。我不认为有一个直接的解决方案(虽然这只是我的意见)。

答案 1 :(得分:2)

鉴于正则表达式和确定性有限自动机是等价的,您可以使用algorithms for the minimisation of DFAs中的任何一个来最小化给定的正则表达式。你当然还需要提出一个正则表达式,但如果你只需要接受一个字符串,那么该字符串的字符就是状态。然后,您可以最小化该DFA并将其转换为正则表达式。