使用Java中的正则表达式将$替换为函数

时间:2012-05-23 05:36:05

标签: java regex string

我正在使用以下部分进行SQL查询...

  

BRANCH ='Chennai'和$ ACCOUNT_NO ='12312321'

在这里我想用我已经定义的PL / SQL函数替换$,我需要输出

  

BRANCH ='Chennai'和decode_acc_no(ACCOUNT_NO)='12312321'

我需要使用String来获取所需的输出??正常表达式是什么?

4 个答案:

答案 0 :(得分:1)

使用此:

query.replace("\\$([A-Za-z0-9_]*)", "decode_acc_no($1)");

答案 1 :(得分:1)

这样的事情应该有效:

String str = "BRANCH='Chennai' AND $ACCOUNT_NO='12312321'";
String newStr = str.replaceAll("^(.+?)\\$([A-Z_]+)(.*)$", "$1decode_acc_no($2)$3");
System.out.println(str);
System.out.println(newStr);

打印:

  

BRANCH ='Chennai'和$ ACCOUNT_NO ='12312321'

     

BRANCH ='Chennai'和decode_acc_no(ACCOUNT_NO)='12312321'

编辑:根据您的评论,不,这只会与您在问题中提供的结构相匹配。如果您想要更多灵活性,可以使用:\\$(A-Z_]+)

String str = "BRANCH='Chennai' AND $ACCOUNT_NO='12312321' OR $BENIFICIARY_ACC_NO='2323434'"
String newStr = str.replaceAll("\\$([A-Z_]+)", "decode_acc_no($1)");
System.out.println(newStr);

打印出以下内容:

  

BRANCH ='Chennai'AND decode_acc_no(ACCOUNT_NO)='12312321'ORX_cNC_no(BENIFICIARY_ACC_NO)='2323434'

答案 2 :(得分:0)

快速黑客将是

String original =“BRANCH ='Chennai'AND $ ACCOUNT_NO ='12312321'”;         System.out.println(original.replace(“'AND $ ACCOUNT_NO”,“'AND decode_acc_no(ACCOUNT_NO)”));

你也可以使用正则表达式s / \ $([A-Za-z _] *)/ decode_acc_no(\ 1)/ g

答案 3 :(得分:0)

String in = "BRANCH='Chennai' AND $ACCOUNT_NO='12312321'";
String result = in.replaceAll("\\$([^=]+)", "decode_acc_no($1)");

<强>输出:

  

BRANCH =&#39;奈&#39; AND decode_acc_no(ACCOUNT_NO)=&#39; 12312321&#39;

正则表达式\\$([^=]+)搜索$个字符,然后匹配非=的所有内容。这存储在第一个捕获组中。使用$1在替换字符串中重用该捕获组的内容。

What absolutely every Programmer should know about regular expressions
免责声明:我自己的博客文章