非捕获组java正则表达式

时间:2017-02-28 17:28:59

标签: java regex

我看过这篇文章What is a non-capturing group? What does a question mark followed by a colon (?:) mean?

我认为以下内容可行,但不会......

我有一个字符串"Game No : 432543254 \n"

Pattern p = Pattern.compile("(?:Game No : )[0-9]*?(\n)");
Matcher m = p.matcher(curr);
m.find();
System.out.print(m.group());

但上面的代码打印整个字符串,而不仅仅是我想要的数字

1 个答案:

答案 0 :(得分:2)

非捕获组不会捕获,但仍匹配字符串。此外,您的模式中的数字和换行符之间有一个空格,因此它不会匹配。

要获取数字,您可以在数字匹配模式周围使用捕获组,如下所示:

Pattern p = Pattern.compile("Game No : ([0-9]+)");
Matcher m = p.matcher(curr);
if (m.find()) {
    System.out.print(m.group(1));
}

请参阅Java demo

或者,使用非正则表达式解决方案,只需与:分开并获取结果数组的第二项并修剪它。