使用 Regex (Java) 在 key=value 组中拆分字符串
Splitting the string in key=value groups using Regex (Java)
我不是正则表达式专家,这就是为什么我请你建议一种在键=值组中拆分此字符串的有效方法。
输入字符串:
x-x="11111" y-y="John-Doe 23" db {rty='Y453'} code {codeDate='2000-03-01T00:00:00'}
我需要的是获取键=值对:
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);
}
在此先感谢您的帮助。
您可以将此正则表达式与 3 个捕获组和一个反向引用一起使用:
([\w-]+)=((['"]).*?)
RegEx Breakup:
([\w-]+)
: 匹配并捕获第 1 组中的键名
=
:匹配=
(
:开始第 2 组
(['"])
:匹配并捕获组 #3 中的引用
.*?
:匹配0个或多个任意字符(惰性匹配)
</code>:向后引用第 3 组以匹配相同类型的结束引号</li>
</ul></li>
<li><code>)
:捕获组 #2 结束
您将在 .group(1)
和 .group(2)
中找到匹配项。
对于第 1 组中单引号和双引号值之间的 select 个值
String ResultString = null;
try {
Pattern regex = Pattern.compile("[\"'](.*?[^\\])[\"']", Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
ResultString = regexMatcher.group(1);
}
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}
我不是正则表达式专家,这就是为什么我请你建议一种在键=值组中拆分此字符串的有效方法。
输入字符串:
x-x="11111" y-y="John-Doe 23" db {rty='Y453'} code {codeDate='2000-03-01T00:00:00'}
我需要的是获取键=值对:
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);
}
在此先感谢您的帮助。
您可以将此正则表达式与 3 个捕获组和一个反向引用一起使用:
([\w-]+)=((['"]).*?)
RegEx Breakup:
([\w-]+)
: 匹配并捕获第 1 组中的键名=
:匹配=
(
:开始第 2 组(['"])
:匹配并捕获组 #3 中的引用
.*?
:匹配0个或多个任意字符(惰性匹配)</code>:向后引用第 3 组以匹配相同类型的结束引号</li> </ul></li> <li><code>)
:捕获组 #2 结束
您将在
.group(1)
和.group(2)
中找到匹配项。
对于第 1 组中单引号和双引号值之间的 select 个值
String ResultString = null;
try {
Pattern regex = Pattern.compile("[\"'](.*?[^\\])[\"']", Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
ResultString = regexMatcher.group(1);
}
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}