2014-04-29 2 views
1

정규식의 마지막 일치 항목을 어떻게 바꿀 수 있습니까? 나는 그것과 관련이 있다는 것을 알고있다? 그러나 우리는 어떻게 그 선견자를 올바르게 사용합니까? 그래서에 대한 몇 가지 유사한 질문이 있지만 그들은 단지 하나의 마지막 문자를 스트립해야 하고이 전체 정규식 일치에 맞게 얻을 수 없습니다.정규식의 마지막 일치 항목 바꾸기

// EDIT: the last regex returned "" not "/0/" - the difference is the ?= instead of ?! 
String foo = "/0/a/b/c/a/b/c/d".replaceAll("(?=a.b.c).*$",""); 
assert (foo, "/0/a/b/c/"); // I keep getting /0/ :-(
+1

정확히 무엇을 가지고있을 때'foo'는 공백이며'/ 0 /'이 아닙니다. – davidfmatheson

답변

1

당신은 다음과 같은 사용할 수 있습니다

String foo = "/0/a/b/c/a/b/c/d".replaceAll("a.b.c(?!.*a.b.c).*", ""); 

패턴이 다른 a.b.c 다음되지 a.b.c 일치합니다.

+0

나를 괴롭 히시오 :)'a.b.c'를 그룹화하고 lookahead에서 참조 할 수도 있습니다 :'(a.b.c) (?!. * \\ 1). *'. – davidfmatheson

+0

네,이 트릭을! thx PS @ davidfmatheson 그리고 yes 표현식 "(a.b.c) (?!. * \\ 1). *"도 사용할 수 있습니다. – KIC

+1

@davidfmatheson,'a.b.c '부분이 다른 경우 역 참조가 작동하지 않습니다. 예 :'/ 0/a/b/c/a/b-c/d'. – falsetru

관련 문제