2012-11-15 3 views
2

정규식이 있습니다. 들어오는 REST URL을 다시 쓰려고하는데 URL의 한 섹션을 제외하면 한 가지 유스 케이스에 얽매여 있습니다. "- $ 2 - $ 3 1 $" 새로운 URL을 서면으로 사용하는 부품으로문자열 섹션을 제외 할 때 정규식 역 참조

^(/[^/]+/(?:books))/([^/]+?)(?:/(?:(?!page).+?))?(?:/page/(\\d+))?$ 

예를 들어 내가 을 사용하고 있습니다 : 여기

내가 현재 사용하고 정규 표현식입니다. 여기

이 제대로 작동 예 ... 의도 한대로
"/mySite/books/topic1/page/2" results in "/mySite/books - topic1 - 2" 
"/mySite/books/topic1/subtopic1/page/2" results in "/mySite/books - topic1 - 2" 

은 위의 모든 작업입니다. 문제는 URL에서 URL의 "topic1"부분을 제외하고 필요한 결과가 아닌 경우입니다. 예 :

"/mySite/books/page/2" results in "/mySite/books - page - " 

토픽이없고 페이지 번호가 여전히 $ 3이므로 $ 2는 공백이되어야합니다. 나는 무엇

"/mySite/books/page/2" results in "/mySite/books - - 2" 

나는 제대로 작동 기존의 사람을 방해하지 않고 그 시나리오를 만족시키기 위해 내 정규식 무엇 변경할 수 있습니다 ... 출력으로 필요 ? 이 작업은 Java로 수행됩니다.

답변

1

당신이 내가 감사를 필요로 정확하게이었다

^(/[^/]+/books)/(?:(?!page/)([^/]+)/)?page/(\\d+)$ 
+0

정규식 패턴을 사용하려고 할 수도 있습니다! 나는 약간의 변경을 가하여/선택 사항 인 페이지를 만들었고^(/ [^ /] +/books)/(? :(?! page /) ([^ /] +) /)? (? : page/(\\ d +))? $ –

1

두 번째 그룹을 유추하면 충분합니다. 그런 다음 엔진은 먼저 그것을 사용하지 않고 일치 항목을 찾습니다 (대신 /page/\\d+ 시도).

^(/[^/]+/(?:books))/([^/]+?)(?:/(?:(?!page).+?))??(?:/page/(\\d+))?$ 

정량 모든 종류의 (?+, *, ?{..})가 ungreedy 수를 붙이는 : 실패 할 경우 그리고 두 번째 그룹을 포함하려고합니다.