我正在尝试使Regexp匹配一个多于或等于两个'1'
s的表达式。
这是我到现在所写的 -
puts "Match." if /(1){1,5}/ =~ test_string
这正确地匹配'1'
大于或等于2的字符串,但如果'1'
的出现次数大于5,它仍然匹配。
如何更正此正则表达式仅匹配具有1到5次1
次出现的字符串?
答案 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/