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

在与数字相邻的java正则表达式中使用反向引用,java,regex,Java,Regex,我想用regexp替换回引用 如果目标字符串类似于: "$1 123" 一切正常。 但是如果我想要一个目标字符串,比如: "$1123" 这行不通 在perl中,可以使用 "${1}123" 要区分后面的引用和相邻的数字,是否有java等价物 编辑 如果有格式的时间戳 YYYYMMDDHHMMSS 比如: 我想重新设置小时、分钟和秒数,以便 20130811000000 我想做的是 String newstring = timestamp.replaceFirst("(\\d{8}))

我想用regexp替换回引用 如果目标字符串类似于:

"$1 123"
一切正常。 但是如果我想要一个目标字符串,比如:

"$1123"
这行不通

在perl中,可以使用

"${1}123"
要区分后面的引用和相邻的数字,是否有java等价物

编辑

如果有格式的时间戳

YYYYMMDDHHMMSS
比如:

我想重新设置小时、分钟和秒数,以便

20130811000000
我想做的是

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

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

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


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

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


您需要将替换指定为:

"$1\\123"

您需要将替换指定为:

"$1\\123"

这似乎是一种逃避

见本例:

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组后退出替换

这似乎是一种逃避

见本例:

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组后退出替换

发布您的Java
模式
、输入的
字符串
和预期结果。为什么需要regex来完成此操作<代码>字符串newStr=“20130811123000”。子字符串(0,8)+“000000”代码示例中的正则表达式在语法上无效。但除此之外,使用
stringnewstring=timestamp.replaceFirst(“(\\d{8})\\d{6},”$1000000“)还有什么不正确的地方?如果正则表达式中的捕获组少于10个,Java将
$10
视为“backreference 1,后跟文字
0
”。发布您的Java
模式
、输入的
字符串
和预期结果。为什么需要正则表达式<代码>字符串newStr=“20130811123000”。子字符串(0,8)+“000000”代码示例中的正则表达式在语法上无效。但除此之外,使用
stringnewstring=timestamp.replaceFirst(“(\\d{8})\\d{6},”$1000000“)还有什么不正确的地方?如果正则表达式中的捕获组少于10个,Java将
$10
视为“backreference 1,后跟literal
0
”。请参阅正则表达式上的这篇文章,您将找到详细解释和示例。参考这篇关于正则表达式的文章,您将找到详细的解释和示例。