如果它与正则表达式匹配,则将java Regex中的常量值替换为其他值

时间:2016-03-26 18:40:40

标签: java regex

我对Java正则表达式有所了解,在我的项目中,我必须做一些文本替换。例如我有这条线

  

db.articles.Find(112);

我想用匹配此正则表达式的byId替换每次出现的Find

  

\ S [A-ZA-Z] +(\)。[α-ZA-Z] +(\)查找\([0-9] + \);

我写这个java代码

public static void main(String[] args) {

   String data = " db.articles.Find(112);";

   String regex = "\\s[a-zA-Z]+(\\.)[a-zA-Z]+(\\.)Find\\([0-9]+\\);";


   data = data.replaceAll(regex, "byId");

   System.out.println(data); // output is byId 

   // but i want output something like this -> db.articles.byId(112);

}

但它没有按预期工作

示例输入

db.articles.Find(12);
dbContex.users.Find(1);
Db.libs.Find(50);

示例输出

db.articles.byId(12);
dbContex.users.byId(1);
Db.libs.byId(50);

1 个答案:

答案 0 :(得分:2)

replaceAll()方法用替换值替换整个匹配的字符串,因此您需要捕获要保留的部分,并将它们插入替换值:

replaceAll("\\b([a-zA-Z]+\\.[a-zA-Z]+\\.)Find(\\([0-9]+\\);)", "$1byId$2")

请参阅regex101了解演示。

已应用更改:

  • \s替换为\b(字边界)
  • 删除了句点的捕获((\\.) - > \\.
  • 添加了Find
  • 之前和之后的文字捕获
  • 将已捕获的文字添加到替换($1$2