正则表达式模式替换字符串中最后一次出现的模式

时间:2019-03-22 07:37:23

标签: java regex

我只想用{id}替换最后一次出现的{objId}{anything else}/模式,将xyz替换为Java。

输入:

/test/data/{id}/moreData/{id}
/test/data/{id}/moreData/{objId}
/test/data/{id}/moreData/{anything else}

预期输出:

/test/data/{id}/moreData/xyz
/test/data/{id}/moreData/xyz
/test/data/{id}/moreData/xyz

请为此建议一个正则表达式。

1 个答案:

答案 0 :(得分:3)

正如注释中所阐明的,您似乎正在寻找替换斜杠/之后出现的最后一个占位符。为此,您可以使用以下正则表达式,

[^/]+$

在这里,[^/]是一个否定的字符类,它捕获除斜杠/之外的任何字符,并且+表示一个或多个字符,而$表示字符串的末尾确保这将匹配出现在字符串末尾且不包含/的所有文本。因此,只需匹配使用它并替换为xyz或您选择的任何字符串即可。

Demo

Java代码

List<String> list = Arrays.asList("/test/data/{id}/moreData/{id}","/test/data/{id}/moreData/{objId}","/test/data/{id}/moreData/{anything else}");
list.forEach(x -> System.out.println(x + " --> " + x.replaceAll("[^/]+$", "xyz")));

打印

/test/data/{id}/moreData/{id} --> /test/data/{id}/moreData/xyz
/test/data/{id}/moreData/{objId} --> /test/data/{id}/moreData/xyz
/test/data/{id}/moreData/{anything else} --> /test/data/{id}/moreData/xyz