Можете ли вы использовать обратные ссылки в виде сзади?
Допустим, я хочу 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
(когда обратная ссылка находится во вложенной вкладке внутри просмотра) работает, но REGEX1
выдает эту ошибку во время выполнения:
Look-behind group does not have an obvious maximum length near index 8
(?<=(.)\1)
^
Этот вид имеет смысл, я полагаю, потому что в общем случае обратная ссылка может захватывать строку любой длины (хотя если компилятор регулярного выражения немного умнее, он может определить, что \1
(.)
в этом случае и, следовательно, имеет конечную длину).
Так есть ли способ использовать обратную ссылку в виде сзади?
А если нет, то можете ли вы обойти это, используя этот вложенный взгляд? Существуют ли другие часто используемые методы?