gpt4 book ai didi

java - 这种模式的正则表达式是什么?

转载 作者:行者123 更新时间:2023-12-02 11:24:36 25 4
gpt4 key购买 nike

我的 Java 程序在某些时候会收到一个包含几个键值属性的字符串,如下例所示:

param1=value Param2=values can have spaces PARAM3=values cant have equal characters

参数的名称/键由单个单词(a-z、A-Z、_ 和 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=.*。 (单词后跟等号,后面加上一些内容)

我该如何编写这个正则表达式?或者使用正则表达式解决该问题的另一种解决方案是什么?

最佳答案

您可以在此处使用Negative Lookahead

(\\w+)=((?:(?!\\s*\\w+=).)*)

键位于捕获组#1内,值位于捕获组#2内。请注意,我在环视中使用了 \s ,以防止该值具有尾随空格。

Live Demo

关于java - 这种模式的正则表达式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24521892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com