正则表达式获取@符号后的字符串

时间:2013-09-17 07:55:26

标签: java regex

我有一个如下字符串:

@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

3 个答案:

答案 0 :(得分:3)

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

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

所以第一组只是GUID

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

其他回复中提到了正确的答案。我会补充一些说明。正如预期的那样,您的代码正常运行。

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

其他回复中提到的括号用于标记捕获组。通俗地说 - 正则表达式引擎为每个括号括起的组执行多次匹配,在嵌套结构中工作。