【问题标题】:What's wrong with my regex in ruby?我在 ruby​​ 中的正则表达式有什么问题?
【发布时间】:2013-07-15 03:59:14
【问题描述】:

我正在编写一个小型 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 ')'

【问题讨论】:

    标签: ruby regex


    【解决方案1】:

    您的正则表达式中有一个未转义的正斜杠字符。您可以使用 Rubular 来测试您的表达式,如 http://rubular.com/r/TvoKOsSImt

    【讨论】:

    • 感谢网站提供的帮助。已修复。
    【解决方案2】:

    / 更改为\/

    意思是,在您在正则表达式中写正斜杠或反斜杠之前,在它们之前放置一个额外的反斜杠 (\)。

    【讨论】:

      【解决方案3】:

      把这个:(, |/| )改成这个(, |\/| )

      未转义的斜杠导致 ruby​​ 正则表达式编译器认为您提前终止了正则表达式。在斜杠之前添加反斜杠会使其在正则表达式中被视为普通斜杠,而不是被解释为指示正则表达式结束的分隔符。

      【讨论】:

      • 这是一个未转义的正斜杠。它被 转义了 一个反斜杠。
      • @millimoose - 是的,当然,感谢您指出这一点......修正并澄清了我的答案。
      猜你喜欢
      • 2013-09-13
      • 1970-01-01
      • 2012-02-24
      • 2013-04-11
      • 2014-08-26
      相关资源
      最近更新 更多