正则表达式修正

时间:2012-11-15 20:06:38

标签: java regex

我正在使用这个正则表达式来解析像"CALENDAR YEAR: 2012"这样的字符串。有人可以推荐一个更好的字符串吗?我想使用matcher.find()(CALENDAR YEAR:\\s+)?((2\\d\\d\\d))

我想在一个小组中获得2012年。

我无法理解为什么在我这样做时打印为null:

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

    }



CALENDAR YEAR: 
2012
null
null

编辑:如果代码使用匹配,我将如何更改表达式?我还想解析字符串中的年份?

2 个答案:

答案 0 :(得分:0)

阅读REGEXP手册

显然,您不知道何时使用?字符,何时不使用。{1}}字符。或何时使用() ...

你可以离开它。

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

应该已经做到了。但是你只是将随机字符扔进你的正则表达式,而不是查看周围的各种例子。

答案 1 :(得分:0)

您根本不需要使用额外的组 - 使用正则表达式

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

...结果将在

myMatcher.group(0)