0

我想使用带有反向引用的正则表达式替换如果目标字符串类似于:

"$1 123"

一切正常。但是如果我想要一个目标字符串,例如:

"$1123"

它不会工作。

在 perl 中,您可以使用

"${1}123"

为了区分后面的引用和相邻的数字 - 是否有 java 等价物?

编辑

如果有格式的时间戳

YYYYMMDDHHMMSS

像:

20130811123000

我想重置小时、分钟和秒以获得

20130811000000

我想做的是

String newstring = timestamp.replaceFirst("(\\d{8}))\\d{6}","${1}000000");
4

3 回答 3

2

您需要将替换指定为:

"$1\\123"
于 2013-08-12T05:59:21.550 回答
1

$12如果存在则引用第 12 组,如果反向引用少于 12 则引用第 1 组。

所以,$1123 $1如果只有一组被捕获,$11如果超过 11 组被捕获等等

参考

于 2013-08-12T05:58:55.420 回答
1

这似乎是一种逃避的工作。

看这个案例:

String input = "abcd";
System.out.println(input.replaceAll("(a)bcd(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?", "$1123"));
System.out.println(input.replaceAll("(a)bcd(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?", "$1\\123"));

输出:

23
a123

在这种情况下,我在反向引用组 1 和反向引用组 11 之间存在歧义。在第 1 次打印中,我没有转义反向引用,因此第 11 组可能会被解释,并且它是空的。在第二张印刷品中,我在对第 1 组的反向引用后逃避了替换。

于 2013-08-12T06:02:58.403 回答