gpt4 book ai didi

java - 当相同的正则表达式在 shell 中工作时,Java 中的正则表达式不起作用

转载 作者:行者123 更新时间:2023-11-29 06:54:48 27 4
gpt4 key购买 nike

我想用 ${variable}$ 替换所有 :variable(以 : 开头的单词)。

例如,

  • :aks_num${aks_num}$

  • :brn_num${brn_num}$

以下是我的代码,它不起作用:

public static void main(String[] argv) throws Exception 
{
CharSequence chSeq = "AND ((:aks_num = -1) OR (aks_num = :aks_num AND ((:brn_num = -1) OR (brn_num = :brn_num))))";

// replaceAll also not working
//String s = chSeq.replaceAll(":\\([a-z_]*\\)","\\${ $1 \\}$");

Pattern p = Pattern.compile(":\\([a-z_]*\\)");
Matcher m = p.matcher(chSeq);

if (m.find()) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
} else {
System.out.println("NO MATCH");
}
}

在 shell 脚本中,以下正则表达式完美运行:

s/:\([a-z_]*\)/${\1}$/g

最佳答案

:\\([a-z_]*\\)(带转义括号)表示您要匹配 :(aks_num) 之类的表达式。显然,输入字符串中没有这样的表达式。这解释了为什么没有匹配项。

相反,如果您想使用括号来捕获某些变量,则不应转义括号。

示例:

CharSequence chSeq = "AND ((:aks_num = -1) OR (aks_num = :aks_num AND ((:brn_num = -1) OR (brn_num = :brn_num))))";
Pattern p = Pattern.compile(":([a-z_]*)");
Matcher m = p.matcher(chSeq);

while (m.find()) {
System.out.println("Found value: " + m.group(0)+". Captured : "+m.group(1));
}

输出:

Found value: :aks_num. Captured : aks_num
Found value: :aks_num. Captured : aks_num
Found value: :brn_num. Captured : brn_num
Found value: :brn_num. Captured : brn_num

关于java - 当相同的正则表达式在 shell 中工作时,Java 中的正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36547324/

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