2009-02-05 58 views
2

我需要解析包含時間跨度的字符串,如:時間/日期範圍文法

  • 週四6:30-7:30 AM
  • 2009年12月30日 - 2010
  • 1月1日1/15/09,7:30到8:30 PM
  • 週四,從6:30到7:30 AM
  • 和其他...

添加

  • 6:30到7:30

和日期/時間等幾乎所有案件Word的插入 - >日期產生

至於我會感到非常驚訝如果有任何內容涵蓋了我需要覆蓋的所有情況,我正在尋找語法。

回答

7

好了,下面的語法解析在你的榜樣東西:

DTExp  = Day, ['-', Day] 
Day   = DayExp, [[','], ['from'], TimeRange] 
DayExp  = WeekDay 
      | [Weekday], Month, DayNumber, [[','], YearNumber] 
      | [Weekday], MonthNumber, '/', DayNumber, ['/', YearNumber] 
TimeRange = Time, [['-'|'to'] Time] 
Time   = HourNumber, ':', MinuteNumber, ['AM'|'PM'] 
WeekDay  = 'monday' | 'tuesday' | ... 
Month  = MonthNumber | MonthName 
MonthName = 'january' | 'february' | ... 
DayNumber = Number 
MonthNumber = Number 
YearNumber = Number, ['AD'|'BC'] 
HourNumber = Number 
MinuteNumber = Number 

有語法中的一個小問題。如果閱讀DayExp,然後是時間和' - ',那麼您可以期待另一個DayExp或其他時間。但是這可以通過一個前瞻來解決,因爲如果它是一個時間,一個數字後跟一個':'。

讓我們試圖建立一個解析樹:(?鏈接)

Thursday 6 : 30  - 7 : 30 AM 
    |  |  |   |   |  | 
WeekDay Number : Number - Number : Number | 
    |  -----|----   -----|----------- 
    |   Time  -  Time 
    |   ---------|--------- 
DayExp    TimeRange 
    ----------|----------- 
      Day 
       | 
      DTExp 
+0

你剛纔生成或者是從其他來源。只是好奇。 – BCS 2009-02-05 19:47:55