我有一个带有以下部分的 SQL 查询......
BRANCH='Chennai' AND $ACCOUNT_NO='12312321'
在此我想用我已经定义的 PL/SQL 函数替换 $,并且我需要输出
BRANCH='Chennai' AND decode_acc_no(ACCOUNT_NO)='12312321'
我需要与字符串一起使用什么正则表达式来获得所需的输出??..
用这个:
query.replace("\\$([A-Za-z0-9_]*)", "decode_acc_no($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' AND $ACCOUNT_NO='12312321'
BRANCH='Chennai' AND 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' OR decode_acc_no(BENIFICIARY_ACC_NO)='2323434'
快速破解将是
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
String in = "BRANCH='Chennai' AND $ACCOUNT_NO='12312321'";
String result = in.replaceAll("\\$([^=]+)", "decode_acc_no($1)");
输出:
BRANCH='Chennai' AND decode_acc_no(ACCOUNT_NO)='12312321'
正则表达式\\$([^=]+)
搜索一个$
字符并匹配所有不是=
. 这存储在第一个捕获组中。该捕获组的内容通过使用在替换字符串中重用$1
。
每个程序员都应该知道的正则表达式
免责声明:我自己的博客文章