-1

我有一个带有以下部分的 SQL 查询......

BRANCH='Chennai' AND $ACCOUNT_NO='12312321'

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

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

我需要与字符串一起使用什么正则表达式来获得所需的输出??..

4

4 回答 4

1

用这个:

query.replace("\\$([A-Za-z0-9_]*)", "decode_acc_no($1)");
于 2012-05-23T05:43:52.510 回答
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'

于 2012-05-23T05:45:14.970 回答
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

于 2012-05-23T05:44:07.347 回答
0
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

每个程序员都应该知道的正则表达式
免责声明:我自己的博客文章

于 2012-05-23T05:50:00.793 回答