정규표현식 질문있습니다.
조회수 417회
'media/dir1/dir2/file.png' 이러한 주소가 있는데 파일 이름만 빼고 'media/dir1/dir2/'이부분만 추출하고 싶어서
'.+(?<=/)' 이런 정규표현식을 사용하여서 성공 하였습니다.
근데 정확하게 왜 성공 하였는지 모르겠습니다.
특히 후방탐색을 한 부분에서 '(?<=/)' 후방탐색이 성공 했다면 왜 후방 탐색한 부분만 없어지고 /를 포함한 앞부분이 결과로 나오는지 궁금합니다.
1 답변
-
괄호로 묶이는 subexpression(
(...)
)의 앞에?=
,?!
,?<=
,?<!
이 나올 경우, 전후방탐색(lookaround)이 적용됩니다. 이때 subexpression에서 일치된 영역은 빈 문자로 나가게 됩니다.따라서
.+(?<=/)
에서는 마지막에 일치되는/
가 빈 문자로 처리되고 그 전까지의 모든 문자가 출력되는 것입니다.첨언하자면, 여기서는 후방탐색보다는 전방탐색이 의미상 더 적합해보입니다.
.+(?=/)
위 전방탐색 표현식의 의미는, 마지막
/
문자가 나오기 전까지의 모든 문자를 출력하라는 의미입니다.
댓글 입력