繁体   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