Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式匹配重复序列_Java_Regex - Fatal编程技术网

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

Java 使用正则表达式匹配重复序列,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} 这

我试图将TCL键控列表转换为Java
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 < /代码>将很好地完成这项工作。