-1

SQLでその場で文字列の置換を行っています。

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

今私がこれをするなら

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

結果は次のようになります

a.account_enc=b.account_enc 

(これはいい)

しかし、2番目の結果を見てください

a.account_enc_num=a.account_enc_num 

(これは良くないはずですa.accountnum_enc=b.accountnum_enc

JavaStringReplaceで私が望むことをどのように達成できるか教えてください。

どうもありがとう。

4

3 に答える 3

2

あなたのコメントから:

とにかく、正規表現でaを置き換えるだけであると言うことはありますか。アカウント=b。アカウントまたは。accountnum =b。accountnumアカウント名を次のように置き換えたくない_enc

私が正しく理解していれば、または_encにのみパーツを追加したいと思います。これを行うには、次を使用できますaccountaccountnum

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

(num)?これnumはオプションであるため、正規表現はaccountまたはaccountnum

\\b開始時は、前に文字、数字、または「_」を含めることができaccountないため、myaccountやmy_accountなどを受け入れない(影響を与えない)ことを意味します。

\\b最後に、アカウントまたはアカウント番号の後に他の文字、数字、または「_」が表示されないようにします。

于 2013-02-23T02:39:18.980 に答える
0

試す

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

これは、単語「account」を開始する''または'='以外のシーケンス文字を、見つかったシーケンス+"_enc"に置き換えることを意味します。

$ 1は、正規表現のグループ1への参照です。グループ1は、括弧内の式(account [^ =] +)、つまりシーケンスです。

詳細については、 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.htmlを参照してください。

于 2013-02-23T01:38:42.817 に答える
0

非常に少数の例から推測するのは難しいですが、おそらくあなたが望むのは次のとおりです。

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

_encこれは、。で始まる文字、数字、およびアンダースコアのシーケンスに追加されますaccount

于 2013-02-23T01:28:01.787 に答える