如何在 Java 中使用正则表达式捕获图形括号内的 key/value?

How to capture key/value inside graph parenthesis with regex in Java?

我在 Java 中有一个字符串,例如:

 String whatIHaveToMatch = "$item1$={key1=1,key2=2,key3=3,}"+
                           "$item2$={key10=4,key11=5,key3=4,key9=7,}"+
                           "$itemN$={keyi-1=5,keyi=3,}";

我如何定义一个模式来让每个组都包含项目并且每个 key/value 关联?

更新:

我必须建立一个 HashMap<String,HashMap<String,Integer>> 其中外部HashMap的每个entryKey是一个item的标识符,returns内部"key"/"value".

的Map

"keys"(在这个例子中:key1,key2,key3...)没有特定的形式,它们可以是字母数字。

正则表达式是错误的工具。你需要一个简单的解析器。 如果这是您需要解析的唯一数据格式,那么您可以编写一些自定义代码来解析您的字符串。如果您需要解析一系列格式,那么像 JavaCC 或 Antlr 这样的东西可能会更好。

这是用正则表达式完成的工作:

String string = "$item1$={key1=1,key2=2,key3=3,}"+
                   "$item2$={key10=4,key11=5,key3=4,key9=7,}"+
                   "$itemN$={keyi-1=5,keyi=3,}";
HashMap<String,HashMap<String,Integer>> myMap = new HashMap<String,HashMap<String,Integer>>();
Pattern itemPattern = Pattern.compile("([^\s{}]+)=\{([^{}]+)\}");
Matcher itemMatcher = itemPattern.matcher(string);
while(itemMatcher.find()) {
    HashMap<String,Integer> item = new HashMap<String,Integer>();
    String itemName = itemMatcher.group(1);
    String itemContent = itemMatcher.group(2);
    Pattern kvPattern = Pattern.compile("([^=,]+)=([^=,]+)");
    Matcher kvMatcher = kvPattern.matcher(itemContent);
    while(kvMatcher.find()) {
        item.put(kvMatcher.group(1), Integer.parseInt(kvMatcher.group(2)));
    }
    myMap.put(itemName, item);
}
System.out.println(myMap.toString());

但是要非常小心。正如 kimbert 所说,正则表达式不是这类工作的正确工具。