如果java正则表达式中的常量值与该正则表达式匹配,则将其替换为其他值
我学习了一点java正则表达式,在我的项目中,我必须做一些文本替换。例如,我有这一行 db.articles.Find(112) 我想用与这个正则表达式匹配的byId替换所有出现的Find \s[a-zA-Z]+(\)[a-zA-Z]+(\)查找\([0-9]+\) 我编写了这个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
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(”);
@PradeepPatireplaceAll
正在使用正则表达式,您编写的内容将无法工作,因为
和(
必须转义。例如,如果输入文件有这一行someObjec.Find(123))
我不想用byId替换它,这就是我使用Regex的原因。@Andreas你是对的。为什么要使用Regex?你可以很好地做一个replaceAll(“.Find(“,”).byId(”);
@PradeepPatireplaceAll
正在使用Regex,你写的东西不起作用,因为
和(
必须转义。例如,如果输入文件中有这一行someObjec.Find(123)
我不想用byId替换它,那我为什么要使用Regex。@Andreas你是对的。