0
我需要一个完全匹配1-12和1-31的正则表达式。 01不匹配,65不匹配。例如“abc 6 abc”是匹配,而“abc 65”不匹配。如何使用正则表达式匹配ruby中的非零填充数字?
我试试这个/[1-9]|1[012]/
,这是行不通的。
我需要一个完全匹配1-12和1-31的正则表达式。 01不匹配,65不匹配。例如“abc 6 abc”是匹配,而“abc 65”不匹配。如何使用正则表达式匹配ruby中的非零填充数字?
我试试这个/[1-9]|1[012]/
,这是行不通的。
您需要在模式中添加单词边界。 \b
匹配单词字符和非单词字符。
对于1-12
/\b(?:1[012]|[1-9])\b/
对于1-31
\b(?:[12]\d|3[01]|[1-9])\b
在我看来,这不是一个单一的正则表达式的工作。在几年后回顾它时,难道不会很难理解这些代码吗?为什么不把它分成两部分?
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
我假设你可以改为使用捕获组,或者添加两个'\ b'并且没有组。正确? – 2015-02-08 17:18:15
是的,你是对的。但它扩展了正则表达式。 – 2015-02-08 17:21:28