0

等值子数组是包含一个或多个具有相同值的连续元素的子数组。

例如,假设我们的数组是:

1,1,3

有四个等值子数组:

[1]、[1]、[3]、[1,1]

请注意,元素可以是多个子数组的一部分。

我知道[\d]匹配数字,但这个要求让我失望了。出于好奇,我正在询问正则表达式解决方案。

4

1 回答 1

1

没有办法用一个正则表达式来做到这一点。事实上,我建议您使用多个版本的字符串。

这个正则表达式应该工作:

^(\d+)(,\1){n}

我做了一些调整以确保更强大的正则表达式:

  • 允许大于 10 的数字
  • 只会在开始时匹配,确保计数不会被抛出

对于长度为 4 的数组,应替换n0, 1, 2, 3。这意味着您必须匹配四个正则表达式。

(注意n=0与 相同^(\d+)

此外,您将不得不“斩首”字符串,这意味着您将首先匹配1,1,1,3(新示例)然后1,1,3,然后1,3,然后3

有趣的事实:您可以使用正则表达式来斩首字符串(第 1 组将有斩首字符串):

^\d+,(.*)

(显然,你需要确保你没有试图斩首一个大小为 1 的数组。)

对于大小为 4 的数组,您需要匹配 4+3+2+1= 10 个正则表达式。您应该测试一下正则表达式是否匹配;如果是这样,您知道将计数增加 1。(请注意,10 是 4 数组的最大连续组合数。)


这里解释了为什么你需要使用多个字符串。采取这个正则表达式:

(\d)(,?\1){n}

再次,n需要更换。您还需要使用g修饰符(或其等效项)。

我将使用您的示例1,1,1,1

  • n=0给出 4 场比赛
  • n=1给出 2 场比赛
  • n=2给出 1 场比赛
  • n=3给出 1 场比赛

如您所见,它不能很好地处理重叠匹配,因为这不是正则表达式的设计方式。

于 2016-08-08T19:18:08.890 回答