正则表达式:多次提取条目

fas*_*sth 1 java regex

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

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

我需要提取所有与模式匹配的内容,<@([WU].+?)>.+这样我就会得到["W12313", "U333111"]. 我成功匹配了一个,但我不知道如何将其提取到列表中。

我使用Java风格。

Wik*_*żew 5

使用<@([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]
Run Code Online (Sandbox Code Playgroud)

请参阅Java 演示正则表达式演示

模式匹配

  • <@- 一个<@子串
  • ([WU][^>]*)- 捕获组 1:
    • [WU]-WU然后
    • [^>]*- 否定字符类匹配 0+ 字符以外的字符>
  • >- 一个>字符。

W如果或后面只能是数字U,则替换[^>]*[0-9]*

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