使用正则表达式限制字符串中的“1”数

时间:2013-08-20 10:33:15

标签: ruby regex string

我正在尝试使Regexp匹配一个多于或等于两个'1' s的表达式。
这是我到现在所写的 -

puts "Match." if /(1){1,5}/ =~ test_string

这正确地匹配'1'大于或等于2的字符串,但如果'1'的出现次数大于5,它仍然匹配。

如何更正此正则表达式仅匹配具有1到5次1次出现的字符串?

3 个答案:

答案 0 :(得分:6)

可能有更好的版本,但这似乎可以解决问题:

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

细分:

  • ^ - 字符串开头
  • [^1]*1 - 零个或多个非1个字符
  • 1 - A'1'。
  • ([^1]*1){1,5} - 此模式发生一到五次。
  • [^1]* - 零个或多个非1个字符
  • $ - 字符串结尾

答案 1 :(得分:3)

@Adrian Wragg 已经按照OP的要求解释了答案。但我想为此问题提出另一种可能的解决方案,如下所示:

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

答案 2 :(得分:1)

如果你的字符串中包含的字符不是一个,那么这是一个可以完成这项工作的正则表达式。查看示例here at Rubular

/\A([^1]*1[^1]*){1,5}\Z/

这将匹配任何具有2个或更多字符串的字符串。查看示例here at Rubular

/\A1{2,}\Z/

这将匹配任何1-5个字符串。查看示例here at Rubular

/\A1{1,5}\Z/