考虑我有一个像这样的字符串: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 demo和regex demo。
模式匹配
<@
-一个<@
子字符串([WU][^>]*)
-捕获组1:[WU]
-W
或U
,然后[^>]*
-与>
以外的0+个字符匹配的否定字符类>
-一个>
字符。如果
W
或U
之后只能有数字,请用[^>]*
替换[0-9]*
。如果
@
后可以有任何ASCII大写字符,请将[WU]
替换为[A-Z]
。