gpt4 book ai didi

java - 正则表达式的组计数问题

转载 作者:行者123 更新时间:2023-12-01 15:40:19 25 4
gpt4 key购买 nike

编辑:原始代码中的 RE 是不相关的(或者说它有意义)。假设您正在匹配 (X)|(Y):在 RE 中使用 OR 组合的两个模式。如何知道实际匹配的是哪种模式?

我正在尝试仅提取与括号内的 RE 匹配的文本。

我面临的问题是,我无法找出匹配的实际组,因为由于 OR,组索引不是恒定。

即在标记为 XXX 的行中 m.group() 返回整个模式

pat1
abcdef2

并且m.group(1)产生

pat
null

并且m.group(2)产生

null
de

m.groupCount()只是RE中的组总数,因此对索引没有用处。

我想要循环打印的是

pat
de

遗憾的是,java 没有 Perl 的 m/运算符来提取内容并将其很好地放入数组中;-)

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

public static void main(String[] args) throws IOException {

Pattern p = Pattern.compile("([pat]+)1|abc([de]+)f2");
String original = " pat1 abcdef2555";

Matcher m = p.matcher(original);
boolean result = m.find();

while (result) {
System.out.println(m.group()); // XXX want to print only matched GROUP!!
result = m.find();
}

}

}

最佳答案

我没有看到 Java 直接支持这一点。

(Perl 确实有一个漂亮的语法,你可以使用 (?|([pat]+)1|abc([de]+)f2) 和这两个组会有相同的数字,这显然没有问题,因为只能有一个或另一个。)

所以给你一个答案

What I want the loop to print is

pat
de

您必须自己检查该组是否可用,因此此循环将为您提供所需的输出:

while (result) {
if (m.group(1)!= null) System.out.println(m.group(1));
if (m.group(2)!= null) System.out.println(m.group(2));
result = m.find();
}

关于java - 正则表达式的组计数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8157315/

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