wudi7965 2011-10-16 11:21
浏览 250
已采纳

正则表达式如何获得组的“所有”匹配的内容,而不仅是最后的匹配

Java中正则表达式如果有组,且组可以重复多次的时候,Matcher.group(int group)返回的是该组的最后一次匹配,
例如:正则式:(a(b*))*,对于输入字符串"ababbabbb",Matcher.group(2)获得的是"bbb"
如果我想获得所有的匹配,也就是"b"、"bb"、"bbb",该如何做?

(是否仅根据正则表达式的处理策略无法做到,如果是这样一般实现的模式是怎样的?)

  • 写回答

3条回答 默认 最新

  • _1_1_7_ 2011-10-17 08:52
    关注

    [code="java"]public static void find(String input, Pattern p, Set set) {
    int l = input.length();
    String output;
    for (int j = l; j >= 0; j--) {
    Matcher m = p.matcher(input.substring(0, j));
    while (m.find()) {
    int n = m.groupCount();
    for (int i = 0; i <= n; i++) {
    output = m.group(i);
    if (output != null) {
    set.add(output);
    }
    }
    }
    }
    }

    public static void main(String[] args) {
        Pattern p = Pattern.compile("(a(b*))*");
        String input = "ababbabbb";
        Set<String> set = new TreeSet<String>();
        find(input, p, set);
        for (String output : set) {
            System.out.println(output);
        }
    }[/code]
    

    注意空字符串也是匹配正则式:(a(b*))*的,应该还有更好的方法

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题