簡體   English   中英

Java字符串替換正則表達式

[英]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部分添加到accountaccountnum 為此,您可以使用

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

(num)? 表示num是可選的,因此正則表達式將接受accountaccountnum

\\\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM