정규 표현식(전방탐색, 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