Java 用于替换字符串中最后出现的模式的正则表达式模式
我只想用Java中的Java 用于替换字符串中最后出现的模式的正则表达式模式,java,regex,Java,Regex,我只想用Java中的xyz替换上次出现在/之后的模式{id}或{objId}的最后一次出现 输入: /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 请
xyz
替换上次出现在/
之后的模式{id}
或{objId}
的最后一次出现
输入:
/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
请为此建议一个正则表达式。如注释中所述,您似乎希望替换斜杠后出现的最后一个占位符
/
。为此,您可以使用以下正则表达式:
[^/]+$
这里,[^/]
是一个求反字符类,它捕获除斜杠以外的任何字符/
,+
表示一个或多个字符,$
表示字符串的结尾,这将确保它与不包含//code>的字符串结尾出现的任何文本相匹配。因此,只需使用它进行匹配,并替换为xyz
或您选择的任何字符串
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")));
如果是java
为什么要使用javascript
标记?到目前为止,您尝试了什么,是否有一些代码?可能重复感谢Pushpesh的输入。我试试这个。我的问题中的一个小变化是,它不仅是ID,还可以是花括号中的任何标识符。只应更换最后一个图案。输入:/data/{objId}/moreData/{ID}/subData/{subId}输出:/data/{objId}/moreData/{ID}/subData/xyz@Pushpesh-我的观点是,我不知道URI模式,它取决于一些外部实现。由于它是一个resourceURI,因此假设目标resourceID始终位于字符串的末尾。所以,这可以是{id}、{objId}或{something_other}。我需要更换这个。另外,如果我们使用$来尝试指定我只需要替换string@MohanS:好的,我想现在你的问题已经很精确了,如果我是正确的,你想匹配/
之后的最后一个字符串,并用一些字符串替换它。在本例中,我将建议另一个正则表达式[^\/]+$
,它将是字符串末尾之前的/
之外的任何文本。如果效果更好,请告诉我。这很有帮助,非常感谢。您使用字符类来匹配/和后面的文本。美元,您只考虑最后一种模式。这正是我要找的。非常感谢。我还将浏览前面提供的正则表达式,了解它是如何工作的。@MohanS:是的,你部分是正确的。让我更新我的答案,并在这里添加解释。
/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