我正在寻找一个 Java 正则表达式来查找文本中的用户名。
用户名始终以@
开头。 @
后面不能有空格。用户名由大小写字母、数字、.
、_
、-
.
因此,正则表达式应该匹配以 @
开头并以空格或换行符结尾的单词。
例如,文本 hi @anyOne.2 我正在寻找 @Name_13
@name14 @_n.a.m.e-15 但不包括 @ name16
包含以下匹配项:anyOne.2
、Name_13
、name14
、_n.a.m.e-15
。
我正在使用
String pattern = "@[^\\s]*(\\w+)";
最佳答案
您可以使用
\B@(\S+)
请参阅regex demo .
详细信息
\B
- 非单词边界,当前位置之前的字符必须是非单词字符(或字符串开头)@
- 一个@
字符(\S+)
- 捕获组 1:一个或多个非空白字符。
String text = "hi @anyOne.2 I'm looking for @Name_13 @name14 @_n.a.m.e-15 but not @ name16";
String pattern = "\\B@(\\S+)";
// Java 9+
String[] results = Pattern.compile(pattern).matcher(text).results().flatMap(grps -> Stream.of(grps.group(1))).toArray(String[]::new);
System.out.println(Arrays.toString(results)); // => [anyOne.2, Name_13, name14, _n.a.m.e-15]
// Java 8 (include import java.util.stream.*)
Matcher m = Pattern.compile(pattern).matcher(text);
List<String> strs = new ArrayList<>();
while(m.find()) {
strs.add(m.group(1));
}
System.out.println(strs); // => [anyOne.2, Name_13, name14, _n.a.m.e-15]
关于java - 用于查找以 @ 开头并以空格或换行符结尾的单词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59046947/