Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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中的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 请

我只想用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

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

如注释中所述,您似乎希望替换斜杠后出现的最后一个占位符
/
。为此,您可以使用以下正则表达式:

[^/]+$
这里,
[^/]
是一个求反字符类,它捕获除斜杠以外的任何字符
/
+
表示一个或多个字符,
$
表示字符串的结尾,这将确保它与不包含
//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