2014-05-19 99 views
0

Regex'ers:java的正則表達式匹配到一個字符串

我如何構建一個Java正則表達式匹配字符串lexigraphically < =給定日期字符串?

例如,假設輸入是YYYY-MM-DD格式:

2014-01-20 MLK day 
2007-04-14 'twas a very good day 
2014-05-19 is today 
1998-11-30 someone's birthday 

我想過濾器之前返回的所有行,也就是說,今年的土撥鼠日2014-02- 20; 所以在上面的列表中,正則表達式將返回除今天以外的所有行。 (我不想將 日期轉換爲Epoch時間;我想只將正則表達式傳遞給運行map/reduce作業的類,以便我的輸入記錄讀取器可以使用正則表達式,因爲它會構建包到交付給映射器。)

TIA,

+0

爲什麼正則表達式爲什麼不是日期解析? –

+2

代替使用解析器會更好。 – hwnd

+0

遺憾的是,設計輸入記錄閱讀器類的團隊僅提供了添加正則表達式的方法。是的,我可以重寫這個,但是那個班做了大量有用的工作。 – user2250400

回答

0

這幾乎是不可能做到<=類型的邏輯與正則表達式。你在技術上可以,但是你必須繪製出每種可能的情況......然後如果你想改變你比較的日期,整個表達式就會改變。相反,我只是匹配所有日期/值,然後使用日期解析器來查看它是否少於日期。這裏的an expression to get you started

(\d{4}-\d{2}-\d{2})\s+(.*) 

然後日期將在捕獲組一。如果它是<=土撥鼠的那一天,那麼你在捕獲組2中有價值。


表明它是多麼複雜做<=邏輯與正則表達式,我whipped together a quick expression匹配數字> 0<= 27

^([1-9]|1[0-9]|2[0-7])$ 

正如你所看到的,我們非常需要繪製出每個場景。你可以想象這會有多少令人頭疼的事情,並且你不會說「2014-02-02」,你需要重做大部分的表達。

相關問題