查找序列中的最小模式

时间:2016-08-24 13:27:59

标签: regex pattern-matching sequence

是否有算法在大序列中找到最小序列?

没有先前知道那些序列会是什么?

例如,给定序列{2,3,1,2,3,1},它将返回 {2,3,1}

此外,如果它旁边有一个非重复序列,即{2,3,1,2,3,1,1,2,3,4},那么该序列将被忽略,你会得到 {2,3,1} {1,2,3,4}

最后,如果之间存在非重复序列,即 { 2,3,1 ,1,2,3,4, 2,3,1 },你也会获得{2,3,1} {1, 2,3,4}

在此领域的任何指导将不胜感激。我一直在玩reg-ex尝试让它工作,但我不确定这是否是最好的方法,即使如此,也无法获得正则表达式执行该操作。

2 个答案:

答案 0 :(得分:2)

添加@ Thomas的答案,您可以在交替中捕获那些非重复序列。这意味着如果第三个捕获组不是空的,那么你有这样的序列。我也让中间.*模式不贪婪:

((?:\d,)+)(.*?)\1+|((?:\d,)+)

Live demo

根据评论更新:

((?:\d,)+?)\1+$|((?:\d,)+)((?:\d,)*?)\2+|((?:\d,)+)

Live demo

答案 1 :(得分:0)

这样的((?:\d,?)+)(.*)\1(.*)可以匹配重复序列,这要归功于对捕获组的反向引用,请参阅live demo