gpt4 book ai didi

Java嵌套正则表达式组不捕获内部组

转载 作者:行者123 更新时间:2023-12-02 01:43:23 25 4
gpt4 key购买 nike

为什么这个正则表达式没有捕获最里面的组?

final String regex = "s(tra(nsformer))";
final Pattern pattern = Pattern.compile(regex);
final Matcher match = pattern.matcher("stransformer");

if (match.matches()) {
System.out.println(match.groupCount());
for (int i = 0; i < match.groupCount(); i++) {
System.out.println(match.group(i));
}
}

以上返回(jdk7中)

2

stransformer

transformer

奇怪的是,"s(tra((nsformer)))"模式按预期工作。 "s(tra(<inner>nsformer))"也是如此,当我将比赛称为 group("inner")

我们缺少什么?

最佳答案

组计数从索引 1 开始。索引 0 包含整个模式。来自 group(int) 的 javadoc :

Capturing groups are indexed from left to right, starting at one. Group zero denotes the entire pattern, so the expression m.group(0) is equivalent to m.group().

因此,请确保循环再迭代一步,更改 <<=例如。

Matcher.group(int) javadoc

这也解释了为什么它在添加额外的捕获组时起作用,计数增加并且您得到最里面的两个之一而不是最后一个。为捕获组命名的原因很明显(没有任何问题,只是列出它们是错误的)。

关于Java嵌套正则表达式组不捕获内部组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54100793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com