gpt4 book ai didi

用于查找格式为 $VAR 或 ${VAR} 的 Unix 环境变量的 Java RegEx 模式

转载 作者:行者123 更新时间:2023-12-01 15:05:05 26 4
gpt4 key购买 nike

这适用于 ${VAR}:

Pattern.compile("\\$\\{(.+?)\\}"); 

但我正在努力格式化它,以便它也接受 $VAR 到下一个单词边界 (\b)。因为文本可以是

$FIRSTVAR.${SECONDVAR}LITERAL

然后我想检测 $FIRSTVAR 和 ${SECONDVAR} ,如果第一个是“X”,第二个是“Y”,我想将其替换为 X.YLITERAL。该模板同时使用 $VAR 和 ${VAR} 样式,如果 var 后跟非单词字符,则首选前者,但如果是后者,则使用后者(就像我上面给出的示例一样)。

我试过了

Pattern.compile("\\$(\\{|)(.+?)(\\}|\b})");

但这与 FIRSTVAR.${SECONDVAR 匹配为组 (2)。所以这不太好。提前致谢

最佳答案

我会写:

Pattern.compile("\\$(?:(\\w+)|\\{(\\w+)\\})")

当然,这意味着 matcher.group(1) matcher.group(2)将是变量名称 - 另一个将为 null - 因此您必须检查两者。

另一个不太稳健的选择是编写:

Pattern.compile("\\$\\{?(\\w+))\\}?")

但随后它将取代例如$SECONDVAR}Y 而不是 Y}

<小时/>

编辑添加:如果您使用的是 Java 7,我认为您应该能够编写

Pattern.compile("\\$(?:(?<varname>\\w+)|\\{(?<varname>\\w+)\\})")

然后使用 matcher.group("varname") 检索变量名称。 (我还没有在 Java 中测试过这一点,因为我手边只有 Java 6,而 Java 6 不支持命名捕获组。但它确实在 Perl 中工作。)请参阅 "Group name" in the java.util.regex.Pattern javadocthe javadoc for java.util.regex.Matcher.group(java.lang.String) .

关于用于查找格式为 $VAR 或 ${VAR} 的 Unix 环境变量的 Java RegEx 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075425/

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