2013-07-14 34 views
0

我在写一个小型的ruby程序,需要从提供给它的字符串中提取时间和日期......它最终会猜测它是什么类型的约会/会议,并用它来最好地为用户服务。不幸的是,下面的正则表达式在我的崇高文本正则表达式搜索中起作用,但不在红宝石中。ruby​​中的正则表达式有什么问题?

email = " 
Med Check 
From Google Calendar 
This invitation is out of date. This event has been updated. 
View updated information on Google Calendar 
more details » 
Med Check 
When 
Mon Jan 10, 2013 9:30am – 10:30am Eastern Time 
Calendar 
Going? Yes - Maybe - No more options »".downcase; 

require 'time' 


#January February March April May June July August September October November December 
r = /(jan(|uary)|feb(|uary)|mar(|ch)|apr(|il)|may|jun(|e)|jul(|y)|aug(|ust)|sept(|tember)|oct(|ober|)|nov(|ember)|dec(|ember)|(\b([1-9]|[12][0-9]|3[01])\b))(|/|,|)(([0-3]|)[0-9]|)(, |\/|)\b2[0-9]{3}\b/ 
if email[r] 
    puts email[r] 
    date =Date.parse(email[r]) 
    puts " We found a date.. Let's see if we can find a time: #{date}" 

    if date< Date.today 
    puts "Why do we need to worry about this?" 
    else 
    r = /([0-9]|)[0-9]:[0-9][0-9][ |pm|am|](am|pm)/ 
    if email[r] 
     time = Time.parse("#{email[r]} #{date}") 
     puts "Found time #{time}" 
     if time<Time.now 
      puts "Error: Time before #{Time.now}" 
     else 
      #Great! 
      puts "Finished let's add it." 

     end 
    end 
    end 
end 

抛出这些错误:

/Users/michael/Downloads/parse.rb:27: end pattern with unmatched parenthesis: /(jan(|uary)|feb(|uary)|mar(|ch)|apr(|il)|may|jun(|e)|jul(|y)|aug(|ust)|sept(|tember)|oct(|ober|)|nov(|ember)|dec(|ember)|(\b([1-9]|[12][0-9]|3[01])\b))(|/ 
/Users/michael/Downloads/parse.rb:27: syntax error, unexpected ',' 
...1-9]|[12][0-9]|3[01])\b))(|/|,|)(([0-3]|)[0-9]|)(, |\/|)\b... 
...        ^
/Users/michael/Downloads/parse.rb:27: syntax error, unexpected ')' 
...-9]|3[01])\b))(|/|,|)(([0-3]|)[0-9]|)(, |\/|)\b2[0-9]{3}\b/ 
...        ^
/Users/michael/Downloads/parse.rb:27: syntax error, unexpected ']', expecting ')' 
...[01])\b))(|/|,|)(([0-3]|)[0-9]|)(, |\/|)\b2[0-9]{3}\b/ 
...        ^
/Users/michael/Downloads/parse.rb:49: syntax error, unexpected end-of-input, expecting ')' 

回答

1

更改/\/

意思是说,在你写正向表达式或反斜杠之前,在它们前面加一个额外的反斜杠(\)。

1

更改此:(, |/|)这个(, |\/|)

的转义斜杠是造成红宝石正则表达式编译器认为你已经提前终止的正则表达式。在斜杠之前添加反斜杠使其在正则表达式中被视为正常斜杠,而不是被解释为指示正则表达式结束的分隔符。

+0

这是一个非常规的正规斜线。它带*反斜杠*。 – millimoose

+0

@millimoose - 是的,当然,谢谢你的指出......修正并澄清了我的答案。 – linguanerd

相关问题