Published on

정규식(Regular Expression) 기초

Authors
  • avatar
    Name
    devnmin
    Twitter

정규식(Regular Expression) 이해하기

정규식은 문자열에서 특정 패턴을 찾거나 매칭, 치환하는 데 사용되는 강력한 도구입니다. 데이터 검증, 텍스트 필터링, 문자열 변환 등 다양한 작업에 활용됩니다.

정규식이 필요한 이유

  1. 문자열 검증: 이메일, 전화번호, 비밀번호 등의 형식 검사
  2. 데이터 추출: 텍스트에서 특정 패턴의 정보 추출
  3. 텍스트 변환: 특정 패턴의 문자열을 다른 형식으로 변환
  4. 데이터 정제: 불필요한 문자 제거나 형식 통일

기본 문법

1. 기본 패턴

기호의미예시설명
.아무 문자 하나a.bacb, a1b 등 매칭
^문자열의 시작^HelloHello로 시작하는 문자열
$문자열의 끝world$world로 끝나는 문자열
*0개 이상 반복ab*a, ab, abb
+1개 이상 반복ab+ab, abb
?0개 또는 1개ab?a, ab

2. 문자 클래스

패턴설명예시
[abc]a, b, c 중 하나[abc]at → cat, bat
[a-z]소문자 알파벳[a-z]+ → hello
[A-Z]대문자 알파벳[A-Z]+ → HELLO
[0-9]숫자[0-9]+ → 12345

3. 특수 문자 클래스

패턴의미동일 표현
\d숫자[0-9]
\w단어 문자[a-zA-Z0-9_]
\s공백 문자스페이스, 탭, 줄바꿈
\D숫자가 아닌 문자[^0-9]
\W단어 문자가 아닌 문자[^a-zA-Z0-9_]
\S공백이 아닌 문자공백, 탭, 줄바꿈이 아닌 문자

실용적인 정규식 패턴

1. 이메일 주소

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • 설명: 일반적인 이메일 주소 형식 검증
  • 예시: user@example.com, john.doe@company.co.kr

2. 전화번호 (한국)

^01[016789]-\d{3,4}-\d{4}$
  • 설명: 한국 휴대폰 번호 형식 검증
  • 예시: 010-1234-5678, 016-123-4567

3. URL

^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
  • 설명: 웹 URL 형식 검증
  • 예시: https://www.example.com, example.com/path

다양한 프로그래밍 언어에서의 사용

JavaScript

const pattern = /\d+/g;
const text = 'Price: 100 dollars';
const matches = text.match(pattern);
console.log(matches); // ['100']

Python

import re
pattern = r"\d+"
text = "Price: 100 dollars"
matches = re.findall(pattern, text)
print(matches) # ['100']

Java

import java.util.regex.*;
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("Price: 100 dollars");
while (matcher.find()) {
    System.out.println(matcher.group()); // 100
}

정규식 사용 시 주의사항

  1. 성능 고려: 복잡한 정규식은 성능에 영향을 줄 수 있습니다.
  2. 가독성: 복잡한 패턴은 주석을 달아 설명하거나 분리하여 작성합니다.
  3. 검증: 정규식 테스트 도구(regex101.com 등)를 활용하여 패턴을 검증합니다.
  4. 예외 처리: 정규식 매칭 실패 케이스를 고려한 예외 처리가 필요합니다.

유용한 정규식 도구

  1. regex101.com: 정규식 테스트 및 디버깅
  2. regexr.com: 실시간 정규식 테스트
  3. debuggex.com: 정규식 시각화 도구

마무리

정규식은 텍스트 처리에 있어 매우 강력한 도구입니다. 처음에는 복잡해 보일 수 있지만, 기본 패턴을 이해하고 실제 사용해보면 많은 문자열 처리 작업을 효율적으로 수행할 수 있습니다. 추가적으로 정규식 계산기 정규식 계산기 를 만들어 보았습니다.

다음 글에서는 더 복잡한 정규식 패턴과 실제 프로젝트에서의 활용 사례를 살펴보겠습니다! 🚀