gpt4 book ai didi

java 正则表达式 : group count fixed

转载 作者:行者123 更新时间:2023-11-30 07:22:00 27 4
gpt4 key购买 nike

我有一个这样的字符串:obj[attr1=val1 attr2=val2 attr3=val3]
我需要提取对象名称和属性。

早些时候,我已经决定使用下一个正则表达式在 javascript 中完成类似的任务:

/^(\w+)(?:\[(\w+=\w+)(?:\s(\w+=\w+))*\])?$/

现在我在用 java 做决定时遇到了麻烦:

Pattern pathPattern = Pattern.compile("^(\\w+)(?:\\[(\\w+=\\w+)(?:\\s+(\\w+=\\w+))*\\])?$");

我只得到一个对象名称和第一个属性。似乎 Mather 类在不考虑符号“*”的情况下获取与“()”计数对应的组计数。

是否有可能像 js regexp 一样使用 java reg exp,或者我需要进行两步提取?

谢谢

最佳答案

Matcher.groupCount() 只计算左括号的数量并将它们视为一个组。因此,您打开的括号数将是组计数的数量(前提是您没有使用任何非捕获组)。

您可以使用以下模式获取 [.*] 中的值:-

Pattern pattern = Pattern.compile("(?:\\b)(\\w+?)=(\\w+?)(?:\\b)");
Matcher matcher = pattern.matcher(str);

while (matcher.find()) {
System.out.println(matcher.group(1) + " : " + matcher.group(2));
}

这将匹配 [] 中的所有 attr=val 对。

输出:-

attr1 : val1
attr2 : val2
attr3 : val3

更新:-

由于您不必在上述字符串中进行边界检查,因此上述模式甚至可以简化为:-

Pattern pattern = Pattern.compile("(\\w+?)=(\\w+)");

关于java 正则表达式 : group count fixed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13024689/

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