java - 用于查找以 @ 开头并以空格或换行符结尾的单词的正则表达式

标签 java regex

我正在寻找一个 Java 正则表达式来查找文本中的用户名。

用户名始终以@开头。 @ 后面不能有空格。用户名由大小写字母、数字、._-.

组成。

因此,正则表达式应该匹配以 @ 开头并以空格或换行符结尾的单词。

例如,文本 hi @anyOne.2 我正在寻找 @Name_13 @name14 @_n.a.m.e-15 但不包括 @ name16 包含以下匹配项:anyOne.2Name_13name14_n.a.m.e-15

我正在使用

String pattern = "@[^\\s]*(\\w+)";

最佳答案

您可以使用

\B@(\S+)

请参阅regex demo .

详细信息

  • \B - 非单词边界,当前位置之前的字符必须是非单词字符(或字符串开头)
  • @ - 一个 @ 字符
  • (\S+) - 捕获组 1:一个或多个非空白字符。

参见Java sample usage :

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/

相关文章:

javascript - 正则表达式说明

ios - 使用单个 RegEx 匹配字符串的变体

php - 巩固重复模式

regex - 从一批正则表达式中获取第一个成功的匹配项

regex - 用于突出显示 Lisp 函数调用中的函数引用的语法高亮规则

java - 是否可以将 NanoHttpd 限制为仅本地主机?

java - Selenium Webdriver - Java - 如何根据产品单击复选框

java - Camel NotifyBuilder 总是返回 false

java - 在单个 ListView 中左右对齐

java - 将 Gson 与 JSend Standard 结合使用时遇到的问题