2012-11-15 130 views
-2

我使用這個正則表達式來解析像"CALENDAR YEAR: 2012"這樣的字符串。有人建議更好的一個嗎?我想用matcher.find()(CALENDAR YEAR:\\s+)?((2\\d\\d\\d))正則表達式更正

我想在一個組中獲得2012年。

我不明白爲什麼它打印空當我這樣做:

while (myMatcher.find()) { 
    System.out.println(myMatcher.group(1)); 
    System.out.println(myMatcher.group(2)); 

    } 



CALENDAR YEAR: 
2012 
null 
null 

編輯:我將如何改變的表達,如果代碼是用比賽和我還是想解析出一年的串?

+0

你想什麼解析? –

+0

什麼分隔符你想格式化你的字符串? – PermGenError

+0

那麼,2000年之前的日期並不存在?你現在有什麼問題? – NullUserException

回答

0

閱讀REGEXP手冊

很明顯,你不知道什麼時候使用?字符,什麼時候不使用。或何時使用() ...

您可以將其保留。

CALENDAR YEAR:\s+(\d{4}) 

應該已經訣竅了。但你只是將隨機字符扔進你的正則表達式,而不是看周圍的各種例子。

+0

實際上,即使是這樣,它也會通過matcher.matches() – Phoenix

+0

進入2012年的無限循環打印。因爲你顯然不明白'matcher.matches()'做了什麼。它不是一個迭代器。它意味着再次提供相同的結果。 –

+0

是的,'matcher.find()'與'matcher.matches()'具有不同的行爲。如果您希望字符串中有多個匹配項,則這是更好的選擇。否則,你可以同時使用兩者,但對於'matches',你需要閱讀手冊中的匹配整個字符串和查找子字符串的區別。 –

0

你並不需要在所有使用額外組(S) - 去與正則表達式模式

(?<=CALENDAR YEAR:)2\\d{3}(?!\\d) 

...和結果將是

myMatcher.group(0)