存在星号通配符时检索 java.util.regex.Matcher 组的所有值
Retrieving all the values of java.util.regex.Matcher group when star wildcard is present
Text = "AAA1.0BBB2.2CCC33.3"
R.Expression = ([A-Z]{3}[0-9]*\.[0-9]*)*
预期输出
AAA1.0<br>
BBB2.2<br>
CCC33.3<br>
Matcher.group(0)
仅 returns CCC33.3.
有什么方法可以获得我预期的输出。
谢谢
是的,只需在 while 块中调用 matcher.find()
并删除第一组:
String Text = "AAA1.0BBB2.2CCC33.3";
Pattern pattern = Pattern.compile("[A-Z]{3}[0-9]*\.[0-9]*");
Matcher matcher = pattern.matcher(Text);
while (matcher.find()){
System.out.println(matcher.group(0));
}
请注意,句点符号必须经过两次转义才能被视为文字句点。
围绕整个模式的捕获组的问题是捕获的文本存储在 1 个缓冲区中,每次捕获文本时都会重新写入该缓冲区。因此,您只能得到最后一个 CCC33.3
.
[A-Z]{3}[0-9]*[.][0-9]*
只需使用它,因为正则表达式引擎在捕获多个连续组时始终只记住最后一组。
Text = "AAA1.0BBB2.2CCC33.3"
R.Expression = ([A-Z]{3}[0-9]*\.[0-9]*)*
预期输出
AAA1.0<br>
BBB2.2<br>
CCC33.3<br>
Matcher.group(0)
仅 returns CCC33.3.
有什么方法可以获得我预期的输出。
谢谢
是的,只需在 while 块中调用 matcher.find()
并删除第一组:
String Text = "AAA1.0BBB2.2CCC33.3";
Pattern pattern = Pattern.compile("[A-Z]{3}[0-9]*\.[0-9]*");
Matcher matcher = pattern.matcher(Text);
while (matcher.find()){
System.out.println(matcher.group(0));
}
请注意,句点符号必须经过两次转义才能被视为文字句点。
围绕整个模式的捕获组的问题是捕获的文本存储在 1 个缓冲区中,每次捕获文本时都会重新写入该缓冲区。因此,您只能得到最后一个 CCC33.3
.
[A-Z]{3}[0-9]*[.][0-9]*
只需使用它,因为正则表达式引擎在捕获多个连续组时始终只记住最后一组。