Ruby 使用Regexp限制字符串中“1”的数目

Ruby 使用Regexp限制字符串中“1”的数目,ruby,regex,string,Ruby,Regex,String,我正在尝试创建一个Regexp来匹配一个表达式,该表达式具有两个以上或等于两个'1'。 这是我到现在为止写的东西- puts "Match." if /(1){1,5}/ =~ test_string 这将正确匹配“1”大于或等于2的字符串,但如果“1”的出现次数大于5,则仍然匹配 如何更正此Regexp以仅匹配出现1到5次1的字符串?可能有更好的版本,但这似乎起到了作用: /^([^1]*1){1,5}[^1]*$/ 细分: ^-字符串的开头 [^1]*1-零个或多个非1字符 1-A‘

我正在尝试创建一个Regexp来匹配一个表达式,该表达式具有两个以上或等于两个'1'。 这是我到现在为止写的东西-

puts "Match." if /(1){1,5}/ =~ test_string
这将正确匹配“1”大于或等于2的字符串,但如果“1”的出现次数大于5,则仍然匹配


如何更正此Regexp以仅匹配出现1到5次1的字符串?

可能有更好的版本,但这似乎起到了作用:

  /^([^1]*1){1,5}[^1]*$/
细分:

^-字符串的开头 [^1]*1-零个或多个非1字符 1-A‘1’。 [^1]*1{1,5}-这种模式出现一到五次。 [^1]*-零个或多个非1字符 $-字符串结尾 @阿德里安·拉格(Adrian Wragg)已经按照OP的要求解释了答案。但我想为这个问题提出另一种可能的解决方案,如下所示:

puts "Match." if "#{test_string}".count("1") >= 2

如果字符串中包含的字符不是一个字符,那么下面是一个正则表达式,它将完成这项工作。请看一个例子

这将使任何字符串与2个或多个字符串匹配。请看一个例子

这将匹配任何1-5个字符串。请看一个例子


谢谢,我会在大约8分钟内将您的答案标记为正确。实际上,^和$分别与行的开头和结尾匹配。要匹配字符串的开头和结尾,您应该使用\A和\z,请参阅。@toro2k在本例中,我假定line==string,但您是正确的,是的。他要求使用正则表达式。这不是正则表达式。@screenmutt是的。。我知道。。但在这种情况下,非正则解决方案很容易。。我把它放在这里。对于这种情况,Stringcount就足够了。@screenmutt有时有比提问者设想的更好的方法。这些都应该得到鼓励。Babai,如果你先回答所问的问题,然后提出替代解决方案,那就太理想了。@MarkThomas你是对的。.但是在我跟帖之前,正则表达式已经被回答了。.所以我开始想你也可以这样做。:@Babai如果有帮助的话,我通常工作的基础是问题是OP试图解决的任务的一个非常简化的版本,因此他可能需要一个不属于问题范围的RegExp。OTOH,Joe Bloggs在谷歌搜索中遇到这个问题可能会从找到你的替代方案中获益。因此,我完全支持你用一个更简单的替代方案来回答这个问题。
/\A([^1]*1[^1]*){1,5}\Z/
/\A1{2,}\Z/
/\A1{1,5}\Z/