2

我有一个如下字符串:

@78517700-1f01-11e3-a6b7-3c970e02b4ec, @68517700-1f01-11e3-a6b7-3c970e02b4ec, @98517700-1f01-11e3-a6b7-3c970e02b4ec, @38517700-1f01-11e3-a6b7-3c970e02b4ec....

我想在@.

我有如下当前代码:

private final static Pattern PATTERN_LOGIN = Pattern.compile("@[^\\s]+");
Matcher m = PATTERN_LOGIN.matcher("@78517700-1f01-11e3-a6b7-3c970e02b4ec , @68517700-1f01-11e3-a6b7-3c970e02b4ec, @98517700-1f01-11e3-a6b7-3c970e02b4ec, @38517700-1f01-11e3-a6b7-3c970e02b4ec");
while (m.find()) {
        String mentionedLogin = m.group();
        .......
   }

...但m.group()给了我@78517700-1f01-11e3-a6b7-3c970e02b4ec,但我想要78517700-1f01-11e3-a6b7-3c970e02b4ec

4

3 回答 3

3

我会修改模式以省略 at 符号:

private final static Pattern PATTERN_LOGIN = Pattern.compile("@([^\\s]+)");

所以第一组将只是 GUID

于 2013-09-17T07:58:40.780 回答
3

您应该使用正则表达式"@([^\\s]+)"then m.group(1),它会返回捕获括号“捕获”的内容()

m.group()m.group(0)返回您的正则表达式找到的完整匹配字符串。

于 2013-09-17T07:59:11.977 回答
0

其他回复中提到了正确答案。我将添加一些说明。您的代码按预期正常工作。

@您的正则表达式意味着:匹配以一个或多个非空格字符开头和之后的字符串。因此,如果您省略括号,则会按预期获得完整的字符串。

其他响应中提到的括号用于标记捕获组。用外行的话来说——正则表达式引擎对每个括号括起来的组进行多次匹配,在嵌套结构内工作。

于 2013-09-17T08:44:16.050 回答