您可以在后视中使用反向引用吗?
假设我想split
在我身后的任何地方重复两次。
String REGEX1 = "(?<=(.)\\1)"; // DOESN'T WORK!
String REGEX2 = "(?<=(?=(.)\\1)..)"; // WORKS!
System.out.println(java.util.Arrays.toString(
"Bazooka killed the poor aardvark (yummy!)"
.split(REGEX2)
)); // prints "[Bazoo, ka kill, ed the poo, r aa, rdvark (yumm, y!)]"
使用REGEX2
(其中反向引用是嵌套在一个lookbehind 中的一个lookahead 中)可以工作,但REGEX1
在运行时会出现此错误:
Look-behind group does not have an obvious maximum length near index 8
(?<=(.)\1)
^
我想这是\1
有道理的,因为通常反向引用可以捕获任何长度的字符串(如果正则表达式编译器更聪明一点,它可以确定(.)
在这种情况下,因此具有有限长度)。
那么有没有办法在后视中使用反向引用?
如果没有,您是否可以始终使用这种嵌套的前瞻来解决它?还有其他常用的技术吗?