gpt4 book ai didi

Java 正则表达式 - 这段代码有什么问题

转载 作者:行者123 更新时间:2023-11-30 04:52:21 27 4
gpt4 key购买 nike

我正在尝试使用$()提取字符串中引用的属性的名称。构造。例如,如果 bb=xo-xo ,然后"aa$(bb)aa"扩展到"aaxo-xoaa" .

这是代码:

public static void main(String[] args) {
final String PROPERTY_NAME_REGEX = "\\w+(?:\\.\\w+)*";
final String PROPERTY_REFERENCE_REGEX = "\\$\\((" + PROPERTY_NAME_REGEX + ")\\)";
Pattern pattern = Pattern.compile(PROPERTY_REFERENCE_REGEX);
String value = "hhh $(aa.bbcc.dd) @jj $(aakfd) j";
Matcher matcher = pattern.matcher(value);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
System.out.println(String.format("\"%s\" at [%d-%d)",
matcher.group(),
matcher.start(),
matcher.end()));
for (int i = 0; i < matcher.groupCount(); ++i) {
System.out.println(String.format("group[%d] = %s", i, matcher.group(i)));
}
}
}

它显示:

"$(aa.bbcc.dd)" at [4-17)
group[0] = $(aa.bbcc.dd)
"$(aakfd)" at [22-30)
group[0] = $(aakfd)

但我希望得到以下输出:

"$(aa.bbcc.dd)" at [4-17)
group[0] = aa.bbcc.dd
"$(aakfd)" at [22-30)
group[0] = aakfd

我做错了什么?

最佳答案

要回答您的具体问题,您应该查看 group[1] ,不是group[0] .

Matcher.groupCount()方法不包括group[0]在计数中,因此您的 for 循环永远不会向您显示 group[1]匹配是因为 i < matcher.groupCount()是假的。

将您的条件更改为 i <= matcher.groupCount()你的输出将会更有启发性。

也就是说,有比编写自己的正则表达式更好的方法 - 例如http://api.dpml.net/ant/1.6.4/org/apache/tools/ant/filters/ExpandProperties.html

关于Java 正则表达式 - 这段代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9557916/

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