等值子阵列是包含一个或多个相同值的连续元素的子阵列。
例如,假设我们的数组是:
-1,1,3-
有四个相等值的子数组:
[1],[1],[3],[1,1]
请注意,元素可以是多个子数组的一部分。
我知道[\d]
匹配数字,但这个要求让我失望。我出于好奇而要求正则表达式解决方案。
答案 0 :(得分:1)
一个正则表达式无法做到这一点。实际上,我建议您使用多个版本的字符串。
这个正则表达式应该有效:
^(\d+)(,\1){n}
我做了一些调整以确保更强大的正则表达式:
对于长度为4的数组,您应该将n
替换为0
,1
,2
,3
。这意味着您必须匹配四个正则表达式。
(请注意,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个匹配 正如您所看到的,它不能很好地处理重叠匹配,因为这不是正则表达式的设计方式。