2013-02-23 55 views
-1

我正在做一些SQL中的字符串替換。Java字符串替換正則表達式

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實現我想要的功能。

很多謝謝。

+0

你應該看看在你的正則表達式中使用捕獲組。 – 2013-02-23 01:42:47

+1

下一次,試着準確地解釋你需要什麼,或許是說:**我想要這個,這個和這個被替換,但不是這個,這個和這個**。 – 2013-02-23 02:41:40

+0

@OscarMederos道歉,會做。 – user2101374 2013-02-23 02:55:56

回答

1

從您的評論見http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

反正有沒有在正則表達式來告訴只替換一個。 賬戶 = b。 賬戶或a。 accountnum = b。 accountnum。我不想ACCOUNTNAME_enc

被替換如果我理解正確的話,你要_enc部分僅添加到accountaccountnum。要做到這一點,你可以使用

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

(num)?意味着num是可選的,所以正則表達式將接受accountaccountnum

\\b在啓動意味着不能有任何字母,數字或「_account之前,所以它不會接受(影響)類似myaccount或my_account的內容。

\\b最後將防止其他字母,數字或帳戶或accountnum後的「_」。

+0

打敗了我;) – 2013-02-23 02:40:55

+0

@OscarMederos希望OP不會說現在像「但我希望它更新只有當我改變的兩個單詞是相同的」所以沒有改變'a.account = b .accountnum' :)(我以前見過:D) – Pshemo 2013-02-23 02:46:58

+0

我不這麼認爲:) – 2013-02-23 02:47:26

0

很難從這麼幾個例子來推斷,但也許你想要的是:

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

這將追加_enc到以account開始的字母,數字和下劃線的任意序列。

+0

非常感謝Ruah,我會試一試,非常感謝,你們真棒。 – user2101374 2013-02-23 01:31:22

+0

嗨Ruakh,這甚至會導致accountname更改爲我不想要的accountname_enc,任何其他建議? – user2101374 2013-02-23 01:35:09

+0

@ user2101374:你怎麼知道你想'accountnum_enc'而不是'accountname_enc'? – ruakh 2013-02-23 01:40:22

0

嘗試

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

它意味着更換未「」或「=」這將啓動單詞「帳戶」與序列中發現+「_enc」的任何序列字符。

$ 1是在正則表達式中對組1的引用;第1組是在括號中的表達式(帳戶[^ =] +),即我們的序列

的細節

+0

謝謝Evgeniy,你能解釋一下你使用的正則表達式嗎?道歉我不是很好正則表達式想要了解你使用的正則表達式是否意味着 – user2101374 2013-02-23 01:44:13

+0

好的,看我的更新 – 2013-02-23 01:55:04

+0

Evgeniy,這不會甚至用a.name_enc = b.name_enc替換a.name = b.name?我只想取代a.account = b.account成爲a.account_enc = b.account_enc或a.accountnum = b.accountnum成爲a.accountnum_enc = b.accountnum_enc – user2101374 2013-02-23 01:58:09