我试图匹配任何数字1-31(包含)。
这是我最接近的:
([1-9]|[12]\d|3[01])
但接受324这样的数字。
那里有一个可以捕获1-31的正则表达式吗?
答案 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)
答案 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)$/