둘러보기에서 역 참조를 사용할 수 있습니까?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
(역 참조는 lookbehind 안에 중첩 된 내다에 임) 작동하지만 REGEX1
런타임에서이 오류를 제공합니다
Look-behind group does not have an obvious maximum length near index 8
(?<=(.)\1)
^
메이크업 감각이 종류, I 일반적으로 역 참조는 길이에 관계없이 문자열을 포착 할 수 있기 때문에 (정규식 컴파일러가 조금 더 똑똑하다면 \1
이 (.)
이고 따라서 길이가 한정되어 있다고 판단 할 수 있습니다).
역서에서 역 참조를 사용하는 방법이 있습니까?
그리고 그렇지 않은 경우,이 중첩 된 미리보기 헤드를 사용하여 항상 문제를 해결할 수 있습니까? 다른 일반적으로 사용되는 기술이 있습니까?
당신의 독창적 인 해결 방법은 재미 있고 +1입니다. Java를 사용하지 않으므로 직접 시도 할 수 없습니다. 역 참조 그룹이'(? <= \\ 1) (.)'과 같이 둘러보기를 벗어나는 경우 어떻게됩니까? –
@Tim : 결과적으로 'PatternSyntaxException'과 같은 결과를 낳습니다. 그건 그렇고, 만약 누군가가이 문제의 변종으로 놀고 싶어, 나는 단지 코딩에 하나를 저작 : http://codingbat.com/prob/p266235 – polygenelubricants
@ polygenelubricants 나는이 정규식을 upvote 수 좋겠어 : (? <= (? = (.) \\ 1) ..) 적어도 10 번. 매우 우아한! – Eugene