看看regex是否在Ruby中没有返回匹配项

时间:2015-08-21 14:14:30

标签: ruby regex

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。现在它匹配我想要匹配的东西,但是当它不匹配(日期格式)时,我似乎无法找到它返回的内容。它只是空白,但它不是零。我可以用一些方法检查长度吗?

2 个答案:

答案 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