考虑我有一个像这样的字符串:

Hi, <@W12313>, <@U333111>!

我需要使用模式<@([WU].+?)>.+提取所有匹配项,以便获取["W12313", "U333111"]列表。我成功匹配了一个,但不知道如何将其提取到列表中。

我使用Java风格。

最佳答案

<@([WU][^>]*)>正则表达式与以下代码一起使用:

String s = "Hi, <@W12313>, <@U333111>!";
Pattern pattern = Pattern.compile("<@([WU][^>]*)>");
Matcher matcher = pattern.matcher(s);
List<String> res = new ArrayList<>();
while (matcher.find()){
    res.add(matcher.group(1));
}
System.out.println(res);
// => [W12313, U333111]


请参见Java demoregex demo

模式匹配


<@-一个<@子字符串
([WU][^>]*)-捕获组1:


[WU]-WU,然后
[^>]*-与>以外的0+个字符匹配的否定字符类

>-一个>字符。


如果WU之后只能有数字,请用[^>]*替换[0-9]*

如果@后可以有任何ASCII大写字符,请将[WU]替换为[A-Z]

10-07 22:54