我不是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);
}
提前感谢您的帮助。
答案 0 :(得分:3)
您可以将此正则表达式与3个捕获组和反向引用一起使用:
([\w-]+)=((['"]).*?\3)
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