【问题标题】:Converting Ruby DateTime format to regexp将 Ruby DateTime 格式转换为正则表达式
【发布时间】:2012-03-27 09:00:42
【问题描述】:

我想将"%m/%d/%y %H:%M" 之类的日期时间格式字符串转换为正则表达式。我不知道格式字符串中的内容,也不必处理每种情况,所以我一直在尝试将 gsub 放入字符串中。

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})"

【问题讨论】:

  • 我不是 Ruby 专家,但我认为您不想在第一次 gsub 调用中逃避您的替换 /。在左边逃走,而不是在右边。
  • '\/'"\\/" 相同 - 如果/ 不在/regex string literal/ 内部,则不需要转义=> 尝试删除format = format.gsub(/\//,'\/')...
  • 是的,第一个 gsub 似乎实际上并没有做任何事情......你最终想要得到什么?

标签: ruby regex validation datetime


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2012-01-28
    • 2019-05-13
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多