0

我正在尝试制作一个正则表达式来匹配一个大于或等于两个'1's 的表达式。
这是我到现在为止写的——

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

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

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

4

3 回答 3

6

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

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

分解:

  • ^- 字符串的开始
  • [^1]*1- 零个或多个非 1 字符
  • 1- 一个“1”。
  • ([^1]*1){1,5}- 这种模式出现一到五次。
  • [^1]*- 零个或多个非 1 字符
  • $- 字符串结束
于 2013-08-20T10:35:32.513 回答
3

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

puts "Match." if "#{test_string}".count("1") >= 2
于 2013-08-20T10:39:42.483 回答
1

如果您的字符串包含一个以外的字符,这里有一个正则表达式可以完成这项工作。请参阅Rubular 此处的示例

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

这将匹配具有 2 个或更多字符串的任何字符串。请参阅Rubular 此处的示例

/\A1{2,}\Z/

这将匹配任何具有 1-5 个字符串的字符串。请参阅Rubular 此处的示例

/\A1{1,5}\Z/
于 2013-08-20T11:03:38.083 回答