복잡한 텍스트 데이터,
정규표현식(Regex)으로 한 방에 해결한 썰
개발자라면 누구나 한 번쯤 마주치지만, 처음엔 마치 '외계어'처럼 느껴지는 정규표현식(Regular Expression, Regex). 수만 줄 로그 파일에서 이메일 하나를 뽑는 데 반나절을 보낸 적이 있다면, 이 글이 딱 필요한 순간입니다.
💡수만 줄의 로그 파일에서 이메일만 뽑아야 했던 그 날
과거 프로젝트에서 서버 로그 수만 줄 더미 속에서 고객 이메일 주소만 추출해야 하는 업무를 맡은 적이 있습니다. 정규표현식에 익숙하지 않았던 저는 처음에 JavaScript로 반복문을
돌리고, indexOf로 @ 기호를 찾고, 그 앞뒤 문자열을 잘라내는 방식으로
접근했습니다. 코드는 금세 수백 줄로 불어났고, 메일 주소 끝에 특수문자가 붙는 예외 케이스가 발생할 때마다 추가 수정을 반복해야 했죠.
그때 옆자리 시니어 개발자분이 오시더니, 단 한 줄의 정규식을 작성하셨습니다.
// 이메일 전체 추출 패턴 (전역 플래그 포함)
/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g
// 실제 적용 예시
const emails = logText.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g);
이 단 한 줄이 수백 줄의 코드를 대체하고, 수만 줄 로그에서 1초 만에 이메일만 깔끔하게 뽑아내는 걸 본 순간 — 머리를 한 대 맞은 것 같았습니다. 그날 이후 정규표현식과 친해지기로 결심했죠.
그리고 지금은 단언할 수 있습니다. 정규표현식을 아는 것과 모르는 것은 퇴근 시간을 결정짓는 엄청난 차이를 만든다는 걸요.
📝실무에서 가장 많이 쓰는 핵심 패턴 3가지
정규식의 모든 문법을 외울 필요는 없습니다. 아래 3가지 패턴만 체득해도 실무 텍스트 작업의 80% 이상은 커버됩니다. 더 깊이 파고들고 싶다면 MDN 정규표현식 가이드를 참고하세요.
\d는 숫자(0–9), \D는 숫자가 아닌 문자를 의미합니다. 횟수 지정자 {n}와 결합하면
전화번호·주민번호 형식 검증이 단번에 해결됩니다.→ 010-1234-5678 매칭
^는 문자열의 시작, $는 끝을 앵커링합니다. 입력값이 반드시 특정 형식 전체와 일치해야 할 때(비밀번호, 우편번호 등) 필수적으로 사용합니다.
→ 영문 시작 6자 이상
+는 앞 문자가 1회 이상, *는 0회 이상 반복됨을 뜻합니다. ?는 0 또는 1회(선택적 존재). 세
기호를 조합하면 가변 길이 문자열도 정확히 잡아냅니다.→ http, https URL 모두 매칭
이 기호들을 레고 블록처럼 조립하면, 아무리 복잡한 텍스트 패턴도 간결한 한 줄로 표현할 수 있습니다.
패턴이 딱 맞아 떨어지는 순간의 쾌감 — 개발자만이 아는 재미입니다.
🛠️정규식이 아직 두렵다면? 제가 만든 실시간 테스트 도구를 써보세요
정규표현식을 공부하면서 가장 답답했던 점은 "내가 작성한 패턴이 어떤 텍스트에 어떻게 매칭되는지"를 머릿속으로만 시뮬레이션해야 한다는 것이었습니다. 코드를 실행해보고 에러가 나면 수정하고 다시 실행하는 과정이 너무 번거로웠죠.
그래서 패턴을 입력하는 즉시 매칭 결과를 시각적으로 확인할 수 있는 Regex 실시간 검증 도구를 직접 만들었습니다.
패턴을 입력하면 매칭 결과가 실시간으로 하이라이팅됩니다.
글로벌(g), 대소문자 무시(i), 다중 행(m) 플래그도 즉시 테스트할 수 있어요.
이런 분들에게 특히 유용합니다:
- 정규표현식을 처음 공부하면서 패턴이 텍스트에 어떻게 적용되는지 직관적으로 보고 싶은 분
- 복잡한 문자열 파싱 코드를 작성하기 전, 패턴을 빠르게 검증하고 싶은 개발자 및 데이터 분석가
- 플래그(Flag) 옵션 변화에 따른 매칭 결과를 즉각 비교하고 싶은 분
Comments
Post a Comment