Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果java正则表达式中的常量值与该正则表达式匹配,则将其替换为其他值_Java_Regex - Fatal编程技术网

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

如果java正则表达式中的常量值与该正则表达式匹配,则将其替换为其他值,java,regex,Java,Regex,我学习了一点java正则表达式,在我的项目中,我必须做一些文本替换。例如,我有这一行 db.articles.Find(112) 我想用与这个正则表达式匹配的byId替换所有出现的Find \s[a-zA-Z]+(\)[a-zA-Z]+(\)查找\([0-9]+\) 我编写了这个java代码 public static void main(String[] args) { String data = " db.articles.Find(112);"; String regex

我学习了一点java正则表达式,在我的项目中,我必须做一些文本替换。例如,我有这一行

db.articles.Find(112)

我想用与这个正则表达式匹配的byId替换所有出现的Find

\s[a-zA-Z]+(\)[a-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);
replaceAll()
方法将整个匹配字符串替换为替换值,因此您需要捕获要保留的部分,并将其插入替换值中:

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

适用的更改:

  • \s
    替换为
    \b
    (单词边界)
  • 已删除句点捕获(
    (\\)
    ->
    \\。
  • 添加了在
    Find
  • 将捕获的文本添加到替换(
    $1
    $2
方法
replaceAll()
用替换值替换整个匹配字符串,因此您需要捕获要保留的部分,并将它们插入替换值中:

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

适用的更改:

  • \s
    替换为
    \b
    (单词边界)
  • 已删除句点捕获(
    (\\)
    ->
    \\。
  • 添加了在
    Find
  • 将捕获的文本添加到替换(
    $1
    $2

为什么使用正则表达式?您可以很好地执行
replaceAll(“.Find(“,”.byId(”);
@PradeepPati
replaceAll
正在使用正则表达式,您编写的内容将无法工作,因为
必须转义。例如,如果输入文件有这一行
someObjec.Find(123))
我不想用byId替换它,这就是我使用Regex的原因。@Andreas你是对的。为什么要使用Regex?你可以很好地做一个
replaceAll(“.Find(“,”).byId(”);
@PradeepPati
replaceAll
正在使用Regex,你写的东西不起作用,因为
必须转义。例如,如果输入文件中有这一行
someObjec.Find(123)
我不想用byId替换它,那我为什么要使用Regex。@Andreas你是对的。