2012-03-09 45 views
2

我想将日期时间格式字符串(如"%m/%d/%y %H:%M")转换为正则表达式。我不知道格式字符串是什么,我不必处理所有的情况,所以我一直在试图将gsub放入字符串中。将Ruby DateTime格式转换为正则表达式

DATEFORMAT = "%m/%d/%y %H:%M" 

def date_format_to_regex 
    format = DATEFORMAT 
    format = format.gsub(/\//,'\/') 
    format = format.gsub(/%[ymdCHI]/,'[[:digit:]]{2}') #two digits 
    format = format.gsub(/%[YMS]/,'[[:digit:]]{4}') #four digits 
    @date_regex = Regexp.new(format) 
end 

但是那个螺丝了很多斜线

"%m/%d/%y %H:%M == (?-mix:[[:digit:]]{2}\\/[[:digit:]]{2}\\/[[:digit:]]{2} [[:digit:]]{2}:[[:digit:]]{4})" 
+1

我不是Ruby的专家,但我不认为你想要逃避你更换'/'的输出在第一个gsub调用。在左边逃跑,而不是在右边。 – Madbreaks 2012-03-09 23:15:41

+1

''\ /''和'“\\ /”'相同 - 如果不在'/ regex string literal /'=里面,'/'不需要转义'尝试删除'format = format.gsub(/ //,'\ /')'...... – Aprillion 2012-03-09 23:27:12

+2

是的,第一个gsub似乎没有做任何事情......你最终想得到什么? – Jwosty 2012-03-10 00:12:31

回答

1
DATEFORMAT = "%m/%d/%y %H:%M" 

def date_format_to_regex  
    format = DATEFORMAT.gsub(/%[ymdCHI]/, "\\d{2}").gsub(/%[YMS]/, "\\d{4}") 
    @date_regex = Regexp.new(format) 
end 
相关问题