使用正则表达式匹配重复序列

时间:2013-02-05 14:12:32

标签: java regex

我正在尝试将TCL键控列表转换为Java HashMap,并且需要使用正则表达式来分解文本片段。我正在使用的文本示例是:

{ID {{NAME X } {HUB 0   } {NUM 14226188  }}} {SRCID {{NAME XY } {HUB 0   } {NUM 14226136  }}} {TYPE DATA }

这里有三个不同的组ID,SRCID和TYPE。我已经尝试使用正则表达式{.*?},但前两个组被分解了。如果我只使用{.*},那么整个字符串将作为一个单元匹配,而不是三个。关于我接下来应该尝试什么的任何建议?

1 个答案:

答案 0 :(得分:0)

以下是带有正则表达式的示例代码,以满足您的要求:

public class RegexTester {
public static void main(String[] args) throws Exception {
    String data = "{ID {{NAME X } {HUB 0   } {NUM 14226188  }}} {SRCID {{NAME XY } {HUB 0   } {NUM 14226136  }}} {TYPE DATA }";

    Pattern pattern = Pattern.compile("(\\{\\bID.+\\})\\s*(\\{SRCID.+\\})\\s*(\\{TYPE DATA.+\\})");
    Matcher matcher = pattern.matcher(data);

    while (matcher.find()) {

        System.out.println(matcher.group(1)); // Group - ID
        System.out.println(matcher.group(2)); // Group - SRCID
        System.out.println(matcher.group(3)); // Group - TYPE DATA
    }
}

输出:

{ID {{NAME X} {HUB 0} {NUM 14226188}}}
{SRCID {{姓名XY} {HUB 0} {NUM 14226136}}}
{TYPE DATA}

希望这有帮助。