gpt4 book ai didi

java - Java中的模式匹配问题

转载 作者:行者123 更新时间:2023-12-01 16:49:52 25 4
gpt4 key购买 nike

我对正则表达式很差。我用谷歌搜索并对其有了基本的了解。

我有以下要求:我的命令可能包含一些带有“$(VAR_NAME)”模式的字符串。我需要找出它是否有这种类型的字符串。如果是这样,我必须解决这些问题(如果存在这样的字符串,我知道我应该做什么)。但是,问题是,如何查找命令是否具有“$(VAR_NAME)”模式的字符串。我的命令中可能有多个或零个这样的字符串模式。

据我所知,我编写了以下代码。如果我在下面的代码中使用 'pattern1' ,它是匹配的。但是,不能使用 'pattern' 有人可以帮忙吗?

提前谢谢您。

    final String command = "somescript.file $(ABC_PATH1) $(ENV_PATH2) <may be other args too here>";
final String pattern = "\\Q$(\\w+)\\E";
//final String pattern1 = "\\Q$(ABC_PATH1)\\E";

final Pattern pr = Pattern.compile(pattern);
final Matcher match = pr.matcher(command);
if (match.find())
{
System.out.println("Found value: " + match.group(0));
}
else
{
System.out.println("NO MATCH");
}

最佳答案

使用\Q 和\E 将意味着您无法为变量名称设置捕获组,因为圆括号将按字面解释。

我可能会这样做,只是转义外部的 $、( 和 )。

此外,如果您需要多个匹配项,则需要多次调用 find(),我为此使用了 while 循环。

final String command = "somescript.file $(ABC_PATH1) $(ENV_PATH2) <may be other args too here>";
final String pattern = "\\$\\((\\w+)\\)";

final Pattern pr = Pattern.compile(pattern);
final Matcher match = pr.matcher(command);
while (match.find()) {
System.out.println("Found value: " + match.group(1));
}

输出

Found value: ABC_PATH1
Found value: ENV_PATH2

关于java - Java中的模式匹配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42626399/

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