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