正反模式的正则表达式模式

时间:2019-02-06 08:23:05

标签: java regex

我有一个像[key1=value1, key2=value2]这样的字符串。它还可能只包含一个键,例如[key1=value1]或更多键。如何编写正则表达式进行检索

预期

Group1: key1=value1
Group2: key2=value2

我尝试过/(?<=\[)(.*)=(.*)(,)*(?=\])/ here模式,但是它给了我

实际

Group1: key1=value1, key2
Group2: value2

1 个答案:

答案 0 :(得分:2)

您可以使用提取这些成对的键和值

(\w[^,=]*)=(.*?)(?=]|,\s*\w[^,=]*=)

请参见regex demo

详细信息

  • (\w[^,=]*)-第1组:一个单词char,后跟0+个除=,之外的字符
  • =-一个=字符
  • (.*?)-第2组:除换行符以外的任何0+个字符,应尽可能少,直到最左边的
  • (?=]|,\s*\w[^,=]*=)-一个]字符或,,0+空格,单词char,然后是除=,之外的0+字符,然后是a =

Java demo

String s = "[key1=value1, key2=value2, key 3= text,value # 3]";
Pattern pattern = Pattern.compile("(\\w[^,=]*)=(.*?)(?=]|,\\s*\\w[^,=]*=)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println("Key-value pair found:");
    System.out.println(matcher.group(1).trim());
    System.out.println(matcher.group(2).trim()); 
} 

输出:

Key-value pair found:
key1
value1
Key-value pair found:
key2
value2
Key-value pair found:
key 3
text,value # 3