我有一个如下字符串:
@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
答案 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)
其他回复中提到了正确的答案。我会补充一些说明。正如预期的那样,您的代码正常运行。
你的正则表达式意味着:匹配以@
开头的字符串,然后是一个或多个不是空格的字符。因此,如果省略括号,则可以按预期获得完整的字符串。
其他回复中提到的括号用于标记捕获组。通俗地说 - 正则表达式引擎为每个括号括起的组执行多次匹配,在嵌套结构中工作。