[英]Java String Replace Regex
我正在動態進行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實現我想要的功能。
非常感謝。
根據您的評論:
無論如何在正則表達式中告訴只替換一個。 帳戶 = b。 帳戶或 accountnum = b。 帳號 。 我不想帳戶名是與替代
_enc
如果我理解正確,則只想將_enc
部分添加到account
或accountnum
。 為此,您可以使用
MySQLString = MySQLString.replaceAll("\\baccount(num)?\\b", "$0_enc");
(num)?
表示num
是可選的,因此正則表達式將接受account
或accountnum
\\\\b
開頭表示account
前不能有字母,數字或“ _
”,因此它不會接受(影響)諸如myaccount或my_account之類的內容。
末尾的\\\\b
將防止在帳戶或accountnum之后出現其他字母,數字或“ _
”。
很難從這么幾個例子中推斷出來,但是也許您想要的是:
MySQLString = MySQLString.replaceAll("account\\w*", "$0_enc");
這將追加_enc
的英文字母,數字的任何序列和下划線與啟動account
。
嘗試
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.