我需要一个与1-12和1-31完全匹配的正则表达式。 01不匹配,65不匹配。例如,“abc 6 abc”是匹配,而“abc 65”不是。
我试试这个/[1-9]|1[012]/
,但这不起作用。
答案 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