Ruby—正则表达式,用于匹配0等范围;60秒或0秒;60米

Ruby—正则表达式,用于匹配0等范围;60秒或0秒;60米,ruby,regex,Ruby,Regex,我正在编写一个简单的命令行工具,需要以以下格式匹配用户输入: 0;60秒(从0到60秒) 0;60米(从0到60分钟) 因此,我需要确保: 第一个数字必须介于0和60之间 第二个数字也必须介于0和60之间 必须有“;”之间的范围 必须以“s”或“m”结尾 第二个数字必须大于第一个数字 最好的方法是什么 非常感谢 下面是一个有效的正则表达式 /(\d{1,2})(s|m)/ 它将匹配任何1或2位数字,后跟“s”或“m”,结果将分别存储在$1和$2中。为了确保第一个值在0到60之间,您可能需要

我正在编写一个简单的命令行工具,需要以以下格式匹配用户输入:

0;60秒(从0到60秒)

0;60米(从0到60分钟)

因此,我需要确保:

  • 第一个数字必须介于0和60之间
  • 第二个数字也必须介于0和60之间
  • 必须有“;”之间的范围
  • 必须以“s”或“m”结尾
  • 第二个数字必须大于第一个数字
最好的方法是什么


非常感谢

下面是一个有效的正则表达式

/(\d{1,2})(s|m)/

它将匹配任何1或2位数字,后跟“s”或“m”,结果将分别存储在
$1
$2
中。为了确保第一个值在0到60之间,您可能需要检查
0I是否将基本模式与语义分开。也就是说,我会用正则表达式检查“digits-semicolon-digits-s/m”。然后我会通过编程确保数字在所需的范围内

在Ruby中,这可能不是最好的方法,但这是基本思想:

input =~ /^(\d+);(\d+)[sm]$/

# make sure that 0 <= Integer($1, 10) < Integer($2, 10) <= 60
input=~/^(\d+);(\d+)[sm]$/

#确保0只是修复了我之前写的内容:第二个数字必须大于第一个数字
input =~ /^(\d+);(\d+)[sm]$/

# make sure that 0 <= Integer($1, 10) < Integer($2, 10) <= 60