2012-10-16 67 views
0

在我的程序中,用戶應該能夠指定一個命名方案。他們指定的命名方案應該包含一個簡單的日期格式,如「yyyyMMdd」,「MM-dd-yyyy」,「yyyy/MM/dd」等。我寧願日,月和年的順序無關緊要但可能需要一定的順序(比如第一個接着一個接着一個接着一個接一個)。我希望能夠輕鬆地從字符串中檢索這個日期,以便與SimpleDateFormat類一起使用它。在java中解析一個簡單的日期字符串

下面是一些例子:

input string: "abc?>@dyyyy-MM-dd-|(s*&d)" 
output string: "yyyy-MM-dd" 

input string: "daddy-MM/dd/yyyy-moMMy" 
output string: "MM/dd/yyyy" 

最後我想要做的是,以取代當前日期指定的日期格式(用戶提供的字符串)。

如果我想解決這個問題,使用戶可以只輸入一年之後一個月之後的一天,然後我可以做這樣的事情:

String dateFormat = name.substring(name.indexOf("yyyy"), name.indexOf("dd") + 2) 

但這意味着用戶不能使用String序列「YYYY 「和」dd「在字符串的其餘部分,否則這種方法將無法正常工作。這個表達式也可以用正則表達式表示,但是我不知道如何輕鬆地從字符串中拉出一個匹配正則表達式的子字符串。

+0

您可以使用[Capture Groups](http://stackoverflow.com/questions/6865377/java-regex-capture-group)將結果從正則表達式中提取出來。 – ean5533

+0

我會建議較少的通用符號;更多的是%Y代表年份,%m代表月份,%d代表日期? –

回答

2

使用正則表達式

(MM|dd|yyyy)[\\/-]?(?!\\1)(MM|dd|yyyy)[\\/-]?(?!\\1)(?!\\2)(MM|dd|yyyy) 

您可能要添加你想允許進入上述形態的[...]節的某些其它分隔符。

+0

@Asad - 因爲你刪除了你的答案,你應該刪除現在也是上面的評論,因爲其他用戶不會理解它... –

+0

謝謝!該正則表達式工作,但我如何使用它從整個字符串檢索這個子字符串? (MM | dd | yyyy)[\\/- ]?(?!\\ 1)(MM | dd | yyyy)[\\/- ]?(?!\ 1)我的字符串的格式是.w )(?!\ 2)(MM | dd | yyyy)。*「我只想匹配正則表達式的字符串部分 – user972276

+0

@ user972276 - 閱讀http://stackoverflow.com/questions/4450045/difference-between - 匹配和查找的功能於Java的正則表達式 –