正则表达式为1-31 Ruby

时间:2014-10-12 23:45:20

标签: ruby regex integer

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

这是我最接近的:

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

但接受324这样的数字。

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

4 个答案:

答案 0 :(得分:6)

使用数字比较

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

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

答案 1 :(得分:3)

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

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

Demo here

答案 2 :(得分:2)

试试这个:/^([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

答案 3 :(得分:0)

这是一个:

/^(#{(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)$/