Java 使用正则表达式匹配重复序列
我试图将TCL键控列表转换为JavaJava 使用正则表达式匹配重复序列,java,regex,Java,Regex,我试图将TCL键控列表转换为JavaHashMap,并且需要使用正则表达式来分解文本片段。我使用的文本示例如下: {ID {{NAME X } {HUB 0 } {NUM 14226188 }}} {SRCID {{NAME XY } {HUB 0 } {NUM 14226136 }}} {TYPE DATA } {ID{{NAME X}{HUB 0}{NUM 14226188}}{SRCID{{NAME XY}{HUB 0}{NUM 14226136}}}{TYPE DATA} 这
HashMap
,并且需要使用正则表达式来分解文本片段。我使用的文本示例如下:
{ID {{NAME X } {HUB 0 } {NUM 14226188 }}} {SRCID {{NAME XY } {HUB 0 } {NUM 14226136 }}} {TYPE DATA }
{ID{{NAME X}{HUB 0}{NUM 14226188}}{SRCID{{NAME XY}{HUB 0}{NUM 14226136}}}{TYPE DATA}
这里有三个不同的组ID、SRCID和TYPE。我尝试过使用regexp
{.*?}
,但是前两个组被分开了。如果我只使用{.*}
,那么整个字符串作为一个单元匹配,而不是三个。对我下一步应该尝试什么有什么建议吗?下面是使用正则表达式的示例代码,以满足您的要求:
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{NAME XY}{HUB 0}{NUM 14226136}}}
{TYPE DATA}
希望这能有所帮助。我不认为正则表达式是解决您的问题的方法。你应该扫描字符串的每个符号,如果它是一个卷曲的括号,把它当作一个新的对象(或者对象的一部分)。你可能需要写一个简单的递归下降语法分析器:@ MikHaulvLaDimiRov不,你不必使用PARSER。输入是一致的(复数是平衡的)。<代码> ReGEX < /代码>将很好地完成这项工作。