正则表达式是否有可能识别所有等值子阵列?

时间:2016-08-08 19:03:21

标签: regex sub-array

等值子阵列是包含一个或多个相同值的连续元素的子阵列。

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

  

-1,1,3-

有四个相等值的子数组:

  

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

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

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

1 个答案:

答案 0 :(得分:1)

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

这个正则表达式应该有效:

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

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

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

对于长度为4的数组,您应该将n替换为0123。这意味着您必须匹配四个正则表达式。

(请注意,n=0^(\d+)

相同

此外,你必须" behead"字符串,表示您首先匹配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个匹配

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