我正在尝试制作一个正则表达式来匹配一个大于或等于两个'1'
s 的表达式。
这是我到现在为止写的——
puts "Match." if /(1){1,5}/ =~ test_string
'1'
这可以正确匹配大于或等于 2 的字符串,但如果 的出现次数'1'
大于 5,它仍然匹配。
如何更正此正则表达式以仅匹配出现 1 到 5 次的字符串1
?
可能有更好的版本,但这似乎可以解决问题:
/^([^1]*1){1,5}[^1]*$/
分解:
^
- 字符串的开始[^1]*1
- 零个或多个非 1 字符1
- 一个“1”。([^1]*1){1,5}
- 这种模式出现一到五次。[^1]*
- 零个或多个非 1 字符$
- 字符串结束@Adrian Wragg已经按照 OP 的要求解释了答案。但我想为这个问题提出另一种可能的解决方案,如下所示:
puts "Match." if "#{test_string}".count("1") >= 2
如果您的字符串包含一个以外的字符,这里有一个正则表达式可以完成这项工作。请参阅Rubular 此处的示例。
/\A([^1]*1[^1]*){1,5}\Z/
这将匹配具有 2 个或更多字符串的任何字符串。请参阅Rubular 此处的示例。
/\A1{2,}\Z/
这将匹配任何具有 1-5 个字符串的字符串。请参阅Rubular 此处的示例。
/\A1{1,5}\Z/