我正在用ruby实现以下问题。
下面是我想要的模式:
1234、1324、1432、1423、2341等等
也就是说,四位数中的数字应该在1-4之间,并且也应该是非重复的。
为了让你以一种简单的方式理解,我采用了一个两位数的模式,解决方案应该是: 12,21
即,数字应该是1或2,并且应该是非重复的。
为了确保它们是非重复的,我想使用$1作为我的第二个数字的条件,但它不起作用。
请帮帮我,提前谢谢你。
发布于 2010-06-23 20:04:53
您可以使用此命令(see on rubular.com):
^(?=[1-4]{4}$)(?!.*(.).*\1).*$第一个断言确保它是^[1-4]{4}$,第二个断言是否定的先行检查,它确保您不能匹配.*(.).*\1,即重复字符。第一个断言是“更便宜的”,所以你想先做这件事。
参考文献
相关问题
发布于 2010-06-23 21:49:36
只是为了开怀大笑,这里有另一个选择:
^(?:1()|2()|3()|4()){4}\1\2\3\4$当每个唯一的字符被使用时,它后面的捕获组捕获一个空字符串。反向引用还尝试匹配空字符串,因此如果其中一个不成功,只能意味着关联的组没有参与匹配。只有当字符串包含至少一个重复项时,才会发生这种情况。
这种空捕获组和反向引用的行为在任何regex版本中都不受官方支持,因此请注意抢购者。但它在大多数情况下都能正常工作,包括Ruby。
发布于 2013-01-25 15:00:46
我认为这个解决方案要简单一点
^(?:([1-4])(?!.*\1)){4}$查看here on Rubular
^ # matches the start of the string
(?: # open a non capturing group
([1-4]) # The characters that are allowed the found char is captured in group 1
(?!.*\1) # That character is matched only if it does not occur once more
){4} # Defines the amount of characters
$(?!.*\1)是一个lookahead assertion,以确保字符不会重复。
^和$是匹配字符串开头和结尾的锚点。
https://stackoverflow.com/questions/3101366
复制相似问题