2012-11-15 57 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)