Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,如何仅替换正则表达式的最后一个匹配项?我知道这和我的工作有关?但是我们如何正确地使用前瞻性呢?有一些类似的问题,所以,他们都只需要剥离最后一个字符,我不能得到这个适应整个雷格克斯比赛 // EDIT: the last regex returned "" not "/0/" - the difference is the ?= instead of ?! String foo = "/0/a/b/c/a/b/c/d".replaceAll("(?=a.b.c).*$",""); assert (

如何仅替换正则表达式的最后一个匹配项?我知道这和我的工作有关?但是我们如何正确地使用前瞻性呢?有一些类似的问题,所以,他们都只需要剥离最后一个字符,我不能得到这个适应整个雷格克斯比赛

// EDIT: the last regex returned "" not "/0/" - the difference is the ?= instead of ?!
String foo = "/0/a/b/c/a/b/c/d".replaceAll("(?=a.b.c).*$","");
assert (foo, "/0/a/b/c/"); // I keep getting /0/   :-(
您可以使用以下命令:

String foo = "/0/a/b/c/a/b/c/d".replaceAll("a.b.c(?!.*a.b.c).*", "");

当我完全运行您所拥有的时,
foo
是空的,而不是
/0/
。请告诉我:)您还可以对
a.b.c
进行分组,并在前瞻中引用它:
(a.b.c)(?!\\1)。*
。是的,这就成功了!thx PS@davidfmatheson和yes表达式“(a.b.c)(?!.*\\1)。*”也会起作用。@davidfmatheson,如果
a.b.c
部分不同,则反向引用将不起作用。例如:
/0/a/b/c/a/b-c/d
@falsetru这是真的!我只是假设OP想要排除真正的双重匹配。可能是他们想要排除a.b.c,即使他们不同。