본문 바로가기

개발/JAVA & Spring

정규 표현식(전방탐색, with String.replaceAll)

마스킹 문제를 정규식으로 해결하려고 하다가 알게 된 표현식입니다.

 

다음과 같이 폰번호 뒤 4자리를 제외하고 마스킹을 하려고 합니다.

 

01012341234 -> *******1234

1
2
3
public String mask(String phoneNumber) {
    return phoneNumber.replaceAll("(?=.{5}).""*");
}
cs

사용한 정규표현식은 전방탐색 표현식이며 처음 사용해보는 표현식이라 관련된 표현식을 따로 정리합니다.

 


 

* (?=) : 전방탐색, 찾고자 하는 표현식 뒤에 전방탐색 표현식을 넣으며 (?=) 사이에 표현식을 넣습니다. 전방탐색 표현식을 통해 문자가 존재하고, 그 앞에 찾고자 하는 문자가 존재할 때 일치합니다. 특정 문자가 포함된 문자를 찾고 싶지만 결과에 포함하고 싶지 않을 때 사용합니다.

 

* (?<=) : 후방탐색, 후방탐색 표현식 (?<=) 사이에 표현식을 넣고, 찾고자 하는 표현식을 작성합니다. 후방탐색 표현식을 통해 문자가 존재하고, 그 뒤에 찾고자 하는 문자가 조재할 때 일치합니다. 전방탐색과 유사합니다.

 

* (?!) : 부정형 전방탐색. 전방탐색과 반대로, 부정형 전방탐색 내의 표현식이 일치하고, 찾고자 하는 문자가 존재할 때 일치합니다.


* (?<!) : 부정형 후방탐색. 후방탐색과 반대로, 부정형 후방탐색 내의 표현식이 일치하지 않고, 찾고자 하는 문자가 존재할 때 일치합니다.

 

더 궁금하면 https://medium.com/@originerd/정규표현식-좀-더-깊이-알아보기-5bd16027e1e0

 

정규 표현식 (좀 더) 깊이 알아보기

(A little) Deep Dive into Regular Expressions

medium.com

 

정규 표현식 테스트는 https://regex101.com/

 

Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript

Please wait while the app is loading...

regex101.com