繁体   English   中英

在与数字相邻的Java正则表达式中使用反向引用

[英]Using backreferences in java regular expressions adjacent to digits

我想使用带有正向引用的regexp替换如果目标字符串如下所示:

"$1 123"

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

"$1123"

它不会工作。

在perl中,您可以使用

"${1}123"

为了区分反向引用和相邻数字-是否存在Java等效项?

编辑

如果具有以下格式的时间戳记

YYYYMMDDHHMMSS

喜欢:

20130811123000

我想重设小时,分钟和秒以获取

20130811000000

我想做的是

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

您需要将替换指定为:

"$1\\123"

$12将引用第12个组(如果存在),或者第一个组(如果少于12个反向引用)。

因此,在$1123如果仅捕获了一个组, $11 $1如果捕获$11以上的组, $11 ,依此类推

参考

看来逃脱工程。

看到这种情况:

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之间存在歧义。在第一个打印中,我没有逃脱反向引用,因此组11很可能会被解释,并且为空。 在第二张照片中,在回溯到第1组后,我避免了替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM