在某些情况下,我的Java程序收到一个包含几个键值属性的字符串,例如以下示例:
param1=value Param2=values can have spaces PARAM3=values cant have equal characters
参数的名称/键由一个单词(az,AZ,_和0-9)组成,后跟一个=
字符(不由空格分隔)及其值。该值是一个文本,可以包含空格,并且持续到字符串的结尾或另一个参数的开头。(这是一个单词,后跟等于及其值,等等)
我需要Properties
从此字符串中提取一个对象(字符串到字符串映射)。我试图使用正则表达式来查找每个键值集。代码是这样的:
public static String createProperties(String str) {
Properties prop = new Properties();
Matcher matcher = Pattern.compile(some regex).match(str);
while (matcher.find()) {
String match = matcher.group();
String param = ...; // What comes before '='
String value = ...; // What comes after '='
prop.setProperty(param, value);
}
return prop;
}
但是正则表达式写的不能正常工作。
String regex = "(\\w+=.*)+";
由于.*
告诉正则表达式获取找到的“任何内容”,因此它将匹配整个字符串。我想告诉正则表达式搜索,直到找到另一个\\w=.*
。(单词后跟等号,后跟)
我该怎么写这个正则表达式?或使用正则表达式解决该问题的另一种解决方案是什么?
您可以在此处使用否定前瞻。
(\\w+)=((?:(?!\\s*\\w+=).)*)
键位于捕获组中#1
,值位于捕获组中#2
。请注意,我\s
在环顾四周内使用了该选项,以防止该值具有尾随空格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句