正则表达式为1-31 Ruby

我试图匹配任何数字1-31(包括)。

这是我最接近的:

([1-9]|[12]\d|3[01]) 

但接受324这样的数字。

那里有一个可以捕获1-31的正则表达式的机会吗?

以下正则表达式满足您的条件:

 ^([1-9]|[12][0-9]|3[01])$ 

在这里演示

请使用数字比较

根据您真正想要做的事情或与您的代码进行通信,简单地提取所有整数并拒绝超出所需范围的整数可能更有意义。 例如:

 str = '0 1 20 31 324' str.scan(/\d+/).map(&:to_i).reject { |i| i < 1 or i > 31 } #=> [1, 20, 31] 

试试这个: /^([0-9]|1[0-9]|2[0-9]|3[01])$/

这是一个例子:

 str = STDIN.gets.chomp if str =~ /^([0-9]|1[0-9]|2[0-9]|3[01])$/ puts "Match!" else puts "No match!" end 

这是一个:

 /^(#{(1..31).to_a * '|'})$/ #=> /^(1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/