Ver*_*tex 4 java regex string capturing-group
如何获取带星号的群组的内容?
例如,我想删除一个逗号分隔的列表,例如1,2,3,4,5。
private static final String LIST_REGEX = "^(\\d+)(,\\d+)*$";
private static final Pattern LIST_PATTERN = Pattern.compile(LIST_REGEX);
public static void main(String[] args) {
final String list = "1,2,3,4,5";
final Matcher matcher = LIST_PATTERN.matcher(list);
System.out.println(matcher.matches());
for (int i = 0, n = matcher.groupCount(); i < n; i++) {
System.out.println(i + "\t" + matcher.group(i));
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
true
0 1,2,3,4,5
1 1
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得每一个条目,即,,,,1... ?23
我正在寻找一个共同的解决方案。这只是一个说明性示例。
请想象一个更复杂的正则表达式,^\\[(\\d+)(,\\d+)*\\]$例如匹配列表[1,2,3,4,5]
您可以使用String.split()。
for (String segment : "1,2,3,4,5".split(","))
System.out.println(segment);
Run Code Online (Sandbox Code Playgroud)
或者你可以用断言重复捕获:
Pattern pattern = Pattern.compile("(\\d),?");
for (Matcher m = pattern.matcher("1,2,3,4,5");; m.find())
m.group(1);
Run Code Online (Sandbox Code Playgroud)
对于您添加的第二个示例,您可以进行类似的匹配。
for (String segment : "!!!!![1,2,3,4,5] //"
.replaceFirst("^\\D*(\\d(?:,\\d+)*)\\D*$", "$1")
.split(","))
System.out.println(segment);
Run Code Online (Sandbox Code Playgroud)
我做了一个在线代码演示。我希望这就是你想要的。
如何获得带有星号的任意组的所有匹配项(零个、一个或多个)
(xyz)*?[该组是重复的,我希望获得每一个重复的捕获。]
你不能。正则表达式捕获组和反向引用说明了原因:
给定组的返回值是最后捕获的值
由于带有量词的捕获组保留其编号,因此当您检查该组时引擎会返回什么值?所有引擎都会返回捕获的最后一个值。例如,如果您将字符串
A_B_C_D_与匹配([A-Z]_)+,则当您检查匹配时,组 1 将是D_。除 .NET 引擎外,所有中间值都会丢失。本质上,每次匹配组 1 的模式时都会被覆盖。
| 归档时间: |
|
| 查看次数: |
2166 次 |
| 最近记录: |