得到组与星号的匹配?

2024-04-04

如何获取带星号的群组的内容?

例如,我想删除一个逗号分隔的列表,e。 G。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));
    }
}

输出是

true
0   1,2,3,4,5
1   1

我怎样才能获得每一个条目,i。 e.1, 2, 3, ...?

我正在寻找一个共同的解决方案。这只是一个说明性示例。
请想象一个更复杂的正则表达式,例如^\\[(\\d+)(,\\d+)*\\]$匹配一个列表,例如[1,2,3,4,5]


您可以使用String.split().

for (String segment : "1,2,3,4,5".split(","))
    System.out.println(segment);

或者你可以用断言重复捕获:

Pattern pattern = Pattern.compile("(\\d),?");
for (Matcher m = pattern.matcher("1,2,3,4,5");; m.find())
     m.group(1);

对于您添加的第二个示例,您可以进行类似的匹配。

for (String segment : "!!!!![1,2,3,4,5] //"
                          .replaceFirst("^\\D*(\\d(?:,\\d+)*)\\D*$", "$1")
                          .split(","))
    System.out.println(segment);

我做了一个在线代码演示 http://ideone.com/rXMZ20。我希望这就是你想要的。


如何获得带有星号的任意组的所有匹配项(零个、一个或多个)(xyz)*? [该组是重复的,我希望获得每一个重复的捕获。]

你不能。正则表达式捕获组和反向引用 http://www.rexegg.com/regex-capture.html说出原因:

给定组的返回值是最后捕获的值

由于带有量词的捕获组保留其编号,因此当您检查该组时引擎会返回什么值?所有引擎都会返回捕获的最后一个值。例如,如果您匹配字符串A_B_C_D_ with ([A-Z]_)+,当您查看比赛时,第 1 组将是D_。除 .NET 引擎外,所有中间值都会丢失。本质上,每次匹配组 1 的模式时都会被覆盖。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

得到组与星号的匹配? 的相关文章

随机推荐