-1

我正在动态地在 SQL 中进行一些字符串替换。

MySQLString = " a.account=b.account ";
MySQLString = " a.accountnum=b.accountnum ";

现在如果我这样做

MySQLString.replaceAll("account", "account_enc");

结果将是

a.account_enc=b.account_enc 

(这很好)

但看看第二个结果

a.account_enc_num=a.account_enc_num 

(这应该是不好的a.accountnum_enc=b.accountnum_enc

请告知我如何使用 Java String Replace 来实现我想要的。

非常感谢。

4

3 回答 3

2

从您的评论中:

反正有没有告诉正则表达式只替换一个。帐户=b。帐户或一个。账号=b。帐号。我不希望accountname被替换为_enc

如果我理解正确,您只想将_enc部分添加到accountor accountnum。为此,您可以使用

MySQLString = MySQLString.replaceAll("\\baccount(num)?\\b", "$0_enc");

(num)?表示这num是可选的,因此正则表达式将接受accountaccountnum

\\bat start 表示前面不能有字母、数字或“ _”,account因此它不会接受(影响)诸如 myaccount 或 my_account 之类的内容。

\\b最后将阻止_account 或 accountnum 后面的其他字母、数字或“”。

于 2013-02-23T02:39:18.980 回答
0

很难从这么少的例子中推断出来,但也许你想要的是:

MySQLString = MySQLString.replaceAll("account\\w*", "$0_enc");

它将附加_enc到以 . 开头的任何字母、数字和下划线序列account

于 2013-02-23T01:28:01.787 回答
0

尝试

    String s = " a.accountnum=b.accountnum ".replaceAll("(account[^ =]*)", "$1_enc");

这意味着用找到的序列+“_enc”替换任何以“account”开头的不是''或'='的序列字符。

$1 是对正则表达式中第 1 组的引用;第1组是括号中的表达式(account[^ =]+),即我们的序列

有关详细信息,请参阅http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

于 2013-02-23T01:38:42.817 回答