2013-02-23 53 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