matchData = Regexp.new(/\d{4}-\d{2}-\d{2}\D\d{2}:\d{2}:\d{2}\D/)
puts matchData.match("2015-08-21T13:54:29Z")
if ( !matchData || (matchData.size==0) )
puts "here"
end
我有一个日期格式,我正在尝试检查它是否返回nil。现在它匹配我想要匹配的东西,但是当它不匹配(日期格式)时,我似乎无法找到它返回的内容。它只是空白,但它不是零。我可以用一些方法检查长度吗?
答案 0 :(得分:3)
如果您只想查看匹配项,可以这样做:
if "string" =~ /regex/
# do something
end
关于您的示例无效的原因:您所谓的matchData
是正则表达式,您从未保存对实际MatchData
的引用。你想说的是:
regex = Regexp.new(/\d{4}-\d{2}-\d{2}\D\d{2}:\d{2}:\d{2}\D/)
matchData = regex.match("2015-08-21T13:54:29Z")
puts "here" unless matchData
答案 1 :(得分:0)
如果我理解你的问题,你应该使用DateTime::strptime(而不是正则表达式):
require 'date'
dt = DateTime.strptime('2015-08-21T13:54:29Z', '%Y-%m-%dT%H:%M:%S%z')
#=> #<DateTime: 2015-08-21T13:54:29+00:00 ((2457256j,50069s,0n),+0s,2299161j)>
这不仅会告诉您字符串是否包含指定格式的日期和时间(如果没有,strptime
会引发ArgumentError: invalid date
例外情况rescue
}),但如果它确实解析了日期和时间元素:
d = dt.to_date
#=> #<Date: 2015-08-21 ((2457256j,0s,0n),+0s,2299161j)>
d.year #=> 2015
d.month #=> 8
d.day #=> 21
d.wday #=> 5
t = dt.to_time
#=> 2015-08-21 06:54:29 -0700
t.hour #=> 6
t.min #=> 54
t.sec #=> 29