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条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站