介绍
我在这里看不到很多正则表达式挑战,因此我想提供这种看似简单的方法,可以使用多种正则表达式来以多种方式完成。我希望它为正则表达式爱好者提供一些有趣的打高尔夫球时间。
挑战
面临的挑战是匹配我非常宽松地称为“平等主义者”系列的内容:一系列相等数量的不同字符。最好用示例来描述。
比赛:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
不匹配:
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
一概而论,要匹配形式的主题(为任意字符的列表来,在所有c1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
说明:
输入将不为空。
字符可以稍后在字符串中重复(例如“ banana”)
k > 1
,因此字符串中将始终至少包含2个不同的字符。您可以假定仅将ASCII字符作为输入传递,并且没有字符将成为行终止符。
规则
(感谢马丁·恩德(Martin Ender)出色阐述了这一规则)
您的答案应该由一个正则表达式组成,没有任何其他代码(可选地,使您的解决方案起作用所需的正则表达式修饰符列表除外)。您不得使用允许您以托管语言调用代码的语言正则表达式功能(例如Perl的e
修饰符)。
您可以使用在挑战之前存在的任何正则表达式风味,但请指定风味。
不要假设正则表达式是隐式锚定的,例如,如果您使用的是Python,请假设您的正则表达式用于re.search,而不用于re.match。您的正则表达式必须与整个字符串匹配有效的均等字符串,而对于无效字符串则不匹配。您可以根据需要使用任意数量的捕获组。
您可以假设输入将始终是两个或多个不包含任何行终止符的ASCII字符的字符串。
这是正则表达式高尔夫,因此以字节为单位的最短正则表达式获胜。如果您的语言需要分隔符(通常是/.../
)来表示正则表达式,请不要计算分隔符本身。如果您的解决方案需要修饰符,请为每个修饰符添加一个字节。
标准
这是一门不错的老式高尔夫球,所以请不要考虑效率问题,而要尽量减小正则表达式。
请说明您使用了哪种正则表达式,并在可能的情况下提供一个链接,该链接显示了您在操作中的表情在线演示。
banana
。