使用Regex(Java)在key = value组中拆分字符串

时间:2017-07-26 08:10:32

标签: java regex regex-group

我不是regexp的专家,这就是为什么我要求你建议在key = value组中分割这个字符串的有效方法。

输入字符串:

x-x="11111" y-y="John-Doe 23" db {rty='Y453'} code {codeDate='2000-03-01T00:00:00'}

我需要的是获得key = value对:

key=x-x, value="11111"
key=y-y, value="John-Doe 23"
key=rty, value='Y453'
key=codeDate, value='2000-03-01T00:00:00'

我的解决方案在这里,但我担心它不是最简单的。

String str = "x-x=\"11111\" y-y=\"John-Doe 23\" db {rty='Y453'} code {codeDate='2000-03-01T00:00:00'}";
Matcher m = Pattern.compile("(\\w+-*\\w*)=((\"|')(\\w+( |-|:)*)+(\"|'))").matcher(str);

while(m.find()) {
    String key = m.group(1);
    String value = m.group(2);
    System.out.printf("key=%s, value=%s\n", key, value);
}

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以将此正则表达式与3个捕获组和反向引用一起使用:

([\w-]+)=((['"]).*?\3)

RegEx Demo

RegEx Breakup:
  • ([\w-]+):匹配并捕获组#1中的密钥名称
  • =:匹配=
  • (:启动第2组
    • (['"]):匹配并捕获第3组
    • 中的引用
    • .*?:匹配任何字符的0或更多(懒惰匹配)
    • \3:对第3组的反向引用以匹配相同类型的结束引用
  • ):捕获组#2结束

您将通过.group(1).group(2)获得匹配。

答案 1 :(得分:0)

对于组1中单引号和双引号之间的选择值

SELECT CustomerName, COUNT(OrderID) AS Count_Of_Orders
FROM Customers LEFT JOIN Orders ON Orders.CustomerID = Customers.CustomerID
GROUP BY CustomerName
ORDER BY CustomerName