2012-03-09 4 views
2

Я хотел бы преобразовать строку формата datetime, например "%m/%d/%y %H:%M", в регулярное выражение. Я не буду знать, что находится в строке формата, и мне не нужно обрабатывать каждый случай, поэтому я пытался просто gsub в строку.Преобразование формата Ruby DateTime в regexp

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

Я не эксперт рубина, но я не думаю, вы хотите, чтобы избежать вашей замены ''/в первом вызове gsub. Побег слева, а не справа. – Madbreaks

+1

'' \/''- это то же самое, что' '\\ /" '-'/'не требуется экранирование, если не внутри'/regex string literal/'=> try delete' format = format.gsub (/ \ //, '\ /') '... – Aprillion

+2

Да, первый gsub, похоже, ничего не делает ... что вы пытались получить в конечном счете? – Jwosty

ответ

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 
Смежные вопросы