如何使用regexp匹配ruby中的非零填充数字?

时间:2015-02-08 17:04:21

标签: ruby regex

我需要一个与1-12和1-31完全匹配的正则表达式。 01不匹配,65不匹配。例如,“abc 6 abc”是匹配,而“abc 65”不是。

我试试这个/[1-9]|1[012]/,但这不起作用。

2 个答案:

答案 0 :(得分:1)

您需要在模式周围添加单词边界。 \b匹配单词字符和非单词字符。

1-12

/\b(?:1[012]|[1-9])\b/

1-31

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

答案 1 :(得分:0)

在我看来,这不是单一正则表达式的工作。几年后回顾它时难道不难理解这段代码吗?为什么不把它分成两部分呢?

my_string = 'abc 01 def'
my_string2 = 'abc 8 def'

p  ('1'..'12').include?(my_string[/\d+/])  #=> false
p  ('1'..'12').include?(my_string2[/\d+/]) #=> true