안녕하세요~
오늘은 정규표현식에 대한 글로 찾아왔습니다.
정규표현식은 Regular Expression 줄여서 정규식, RegExp 라고 표현하기도 합니다.
사실 개발할 때 정규식을 쓰긴 해도 보통 패턴이 일치 여부 확인 용도로 사용하곤 했는데요.
오늘은 일치하는 텍스트의 앞, 뒤를 매칭할 때 사용할 수 있는 Lookaround에 대하여 알아보려고 합니다.
보편적인 정규표현식의 사용은 아래 링크를 참조해주세요.
https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D
Lookaround 에는 Lookahead와 Lookbehind의
명칭 | 패턴 | 매치 |
Positive Lookahead 전방탐색 | X(?!Y) | X 뒤에 Y 가 연속해서 존재하는 경우 X와 매치 |
negative Lookahead 부정형 전방탐색 | X(?=Y) | X 뒤에 Y 가 따라오지 않는 경우 X와 매치 |
Positive Lookbehind 후방탐색 | (?<=Y)X | Y뒤에 연속해서 존재하는 X를 찾아 매치 |
negative Lookbehind 부정형 후방탐색 | (?<!Y)X | X 앞에 Y 조건이 존재하지 않는 경우에만 X와 매치 |
전방탐색과 후방탐색의 용어가 헷갈리실 수도 있는데 저는 조건 Y의 앞을 탐색하면 전방, 조건의 뒤를 탐색하면 후방이라고 생각하니 이해가 편했습니다.
또 하나의 특징은 결과가 소모되지 않는다는 것인데요.
패턴을 찾은 뒤 소모되는 것이 아니라 계속해서 패턴을 찾습니다.
이러한 특징을 활용해서 응용방법을 알아볼까요?
lookbehind 예제를 먼저 살펴보겠습니다.
문자열을 자르는 예제를 가지고 왔는데요.
랜덤한 길이의 문자열을 n 개씩 자르고 싶을 때 Lookaround를 응용하면 for 문을 사용하지 않고도 자를 수 있습니다.
(? <=Y) X 식에 조건을 넣어줍니다.
str.split("(?<=\\G.{" + length + "})")
정규식을 사용해 문자열을 자르는 간단한 코드입니다.
해당 코드를 이용해서 아래와 같이 문자열을 원하는 크기대로 자를 수 있습니다.
한 가지 예시를 더 들어보겠습니다.
아래와 같은 정규식을 사용해 $380과 같은 경우에 $뒤의 숫자만 매칭시킬 수 있습니다.
(?<=\$)[0-9.]
이렇게 조건인 $뒤의 숫자가 매칭됩니다.
마찬가지로 전방탐색도 표현식을 활용해 원하는 문자를 추출할 수 있습니다.
머리를 식힐 겸 풀어본 코테 문제가 이렇게 포스팅으로 이어지게 되었네요.
궁금하신 점은 댓글 남겨주시면 제가 아는 한도 내에서 답변드리겠습니다.
읽어주셔서 감사합니다 ^ㅇ^
'Java > About Java' 카테고리의 다른 글
[Java] 배열, 리스트에서 요소 개수 찾기 (1) | 2023.10.15 |
---|---|
[Java] 직렬화와 역직렬화 (0) | 2023.02.21 |
[Java] Immutable Object (0) | 2023.02.14 |
[Java] 얕은 복사 & 깊은 복사 & 방어적 복사 (0) | 2023.02.13 |
[Java] 객체 - 클래스 (0) | 2023.02.06 |