2014-09-01 39 views
1

我必須使用正則表達式才能得到一年的最後兩位數字,但只有當4位數字存在時。當有4位數字時,我有以下正則表達式可以很好地工作。示例2014 - 14正則表達式獲得年份的後兩位數

^.{2} 

但是,我需要這個只在4位數字出現時才起作用。當我只有2位數字時,我正在清空我的字符串。

+1

嘗試'.. $' 看起來是這個副本: http://stackoverflow.com/questions/2511588/regular-expression-extract-last-2-character"s – 2014-09-01 16:26:30

+0

@ HunterBrown你可以使用它嗎?我發現我的模式現在取代了最後兩個,而不是保持它們。謝謝。 – 2014-09-01 16:32:25

回答

6

只需匹配四位數字並只捕獲最後兩位。

^\d{2}(\d{2})$ 

然後參考捕獲組#1來訪問您的匹配結果。

+0

哇...我不明白爲什麼我會把自己複雜得像你做的那麼簡單。因爲這是最簡單的答案。順便說一句,我認爲你應該在開頭加上'^',因爲你可以匹配123456 – 2014-09-01 16:38:52

+0

所以很快的問題,我剛剛意識到我的模式是匹配的最後兩個是正確的,但然後它取代了它們,我真的需要保留最後兩個a所有的時間。有什麼想法嗎。 – 2014-09-01 16:41:09

+0

Java,我有這個。 @Parameter(name =「pattern」,value =「(\\ d {2})\\ d {2} $」), @Parameter(name =「replacement」,value =「」), @Parameter name =「replace」,value =「all」)}), – 2014-09-01 16:47:14

1

你可以使用這個正則表達式。

^(?(?=\d{4}$)..(\d{2}))$ 

Working demo

此正則表達式使用一個IF子句,因此,如果該字符串是4個位數然後捕獲的最後兩個。

enter image description here

1

你不應該因爲有4位既可以工作的正則表達式。您的正則表達式正在查找字符串開頭的任何2個字符。

試試這個:

(?<=\d\d)\d\d$ 

Regular expression visualization

Debuggex Demo

這是菲德在這個問題的答案不同,你不需要使用,隨後指捕獲組以後。只有最後兩位數字是比賽的一部分。它依賴積極的後臺。