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