정규표현식 질문있습니다.

조회수 417회

'media/dir1/dir2/file.png' 이러한 주소가 있는데 파일 이름만 빼고 'media/dir1/dir2/'이부분만 추출하고 싶어서

'.+(?<=/)' 이런 정규표현식을 사용하여서 성공 하였습니다.

근데 정확하게 왜 성공 하였는지 모르겠습니다.

특히 후방탐색을 한 부분에서 '(?<=/)' 후방탐색이 성공 했다면 왜 후방 탐색한 부분만 없어지고 /를 포함한 앞부분이 결과로 나오는지 궁금합니다.

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    괄호로 묶이는 subexpression((...))의 앞에 ?=, ?!, ?<=, ?<! 이 나올 경우, 전후방탐색(lookaround)이 적용됩니다. 이때 subexpression에서 일치된 영역은 빈 문자로 나가게 됩니다.

    따라서 .+(?<=/) 에서는 마지막에 일치되는 /가 빈 문자로 처리되고 그 전까지의 모든 문자가 출력되는 것입니다.

    첨언하자면, 여기서는 후방탐색보다는 전방탐색이 의미상 더 적합해보입니다.

    .+(?=/)

    위 전방탐색 표현식의 의미는, 마지막 /문자가 나오기 전까지의 모든 문자를 출력하라는 의미입니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)