정규 표현식(Regex) 완벽 가이드: 개념부터 실전 활용까지

정규 표현식(Regular Expression, 줄여서 Regex)은 문자열에서 특정한 패턴을 찾거나 변경, 추출하는 데 사용되는 강력한 도구입니다. 프로그래밍을 하다 보면 데이터를 검증하거나 텍스트를 처리하는 일이 많아지는데, 이때 정규 표현식을 활용하면 매우 효율적으로 문제를 해결할 수 있습니다.

이 글에서는 정규 표현식의 기본 개념부터 주요 문법, 활용 예제까지 자세히 살펴보겠습니다.


advertisement

정규 표현식이란?

정규 표현식(Regex)은 문자열에서 일정한 규칙을 가진 패턴을 찾기 위해 사용하는 형식 언어입니다. 예를 들어, 이메일 주소를 검증하거나, 특정한 형식을 가진 전화번호를 찾을 때 정규 표현식을 활용할 수 있습니다.

📌 정규 표현식이 유용한 경우

  • 사용자 입력 데이터 검증 (이메일, 전화번호, 비밀번호 등)
  • 텍스트 검색 및 필터링 (로그 분석, 데이터 크롤링)
  • 문자열 치환 및 변환 (HTML 태그 제거, 특정 단어 변경)

advertisement

정규 표현식 기본 문법

정규 표현식을 이해하기 위해서는 몇 가지 메타 문자(특별한 의미를 가지는 문자)를 익혀야 합니다.

1. 문자열의 시작과 끝

  • ^ : 문자열의 시작
    • 예: ^hello → “hello”로 시작하는 문자열 찾기
  • $ : 문자열의 끝
    • 예: world$ → “world”로 끝나는 문자열 찾기
regex복사편집/^hello/  → "hello world" ✅, "say hello" ❌  
/world$/  → "hello world" ✅, "worldwide" ❌  

2. 문자 집합과 범위

  • [abc] : a, b, c 중 하나와 일치
  • [^abc] : a, b, c를 제외한 문자와 일치
  • [0-9] : 숫자(0~9) 중 하나와 일치
  • [a-zA-Z] : 알파벳 대소문자와 일치
regex복사편집/[aeiou]/ → "apple" ✅, "sky" ❌ (모음 포함 여부)  
/[0-9]/ → "123abc" ✅, "hello" ❌ (숫자 포함 여부)  

3. 자주 사용하는 문자 패턴

  • . : 아무 문자(줄바꿈 제외)
  • \d : 숫자 ([0-9]와 동일)
  • \D : 숫자가 아닌 문자 ([^0-9]와 동일)
  • \w : 단어 문자 (알파벳, 숫자, _)
  • \W : 단어 문자가 아닌 문자
  • \s : 공백 문자 (스페이스, 탭, 줄바꿈 등)
  • \S : 공백이 아닌 문자
regex복사편집/\d+/  → "123" ✅, "abc" ❌ (숫자가 있는 경우)  
/\w+/  → "hello_world" ✅, "!@#" ❌ (단어 문자 포함 여부)  

4. 수량 한정자(반복)

  • ? : 0회 또는 1회
  • * : 0회 이상 반복
  • + : 1회 이상 반복
  • {n} : 정확히 n번 반복
  • {n,} : n회 이상 반복
  • {n,m} : n~m회 반복
r복사편집/colou?r/  → "color" ✅, "colour" ✅, "colouur" ❌  
/\d{3}/  → "123" ✅, "12" ❌ (숫자 3자리)  

5. 그룹화와 참조

  • ( ) : 그룹화하여 패턴 일부를 저장
  • | : OR 연산자 (둘 중 하나와 매칭)
  • \n : 이전 그룹 참조
regex복사편집/(apple|banana)/  → "apple" ✅, "banana" ✅, "cherry" ❌  
/(hi|hello) world/ → "hi world" ✅, "hello world" ✅  

advertisement

정규 표현식 실전 예제

1. 이메일 주소 검증

📌 패턴: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
📌 설명

  • ^[a-zA-Z0-9._%+-]+ → 이메일의 사용자 이름 부분
  • @[a-zA-Z0-9.-]+ → @ 이후 도메인 부분
  • \.[a-zA-Z]{2,}$ → .com, .net 등의 최상위 도메인
regex복사편집/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/

✅ 유효한 이메일:

  • hello@gmail.com
  • user123@yahoo.co.kr

❌ 잘못된 이메일:

  • hello@com
  • user@.com

2. 전화번호 패턴 찾기

📌 패턴: \d{2,3}-\d{3,4}-\d{4}
📌 설명

  • \d{2,3} → 지역번호 (02, 010 등)
  • - → 하이픈 포함
  • \d{3,4} → 중간 번호
  • \d{4} → 마지막 번호
regex복사편집/\d{2,3}-\d{3,4}-\d{4}/

✅ 유효한 번호:

  • 010-1234-5678
  • 02-987-6543

❌ 잘못된 번호:

  • 01012345678
  • 82-010-1234-5678

3. 비밀번호 강도 체크

📌 패턴: ^(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$
📌 설명

  • (?=.*[A-Z]) → 대문자 1개 이상 포함
  • (?=.*\d) → 숫자 1개 이상 포함
  • (?=.*[!@#$%^&*]) → 특수문자 포함
  • [A-Za-z\d!@#$%^&*]{8,} → 8자 이상
regex복사편집/^(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$/

✅ 강한 비밀번호:

  • Hello123!
  • A1b@cD3#

❌ 약한 비밀번호:

  • hello123 (대문자 없음)
  • password! (숫자 없음)

advertisement

마무리

정규 표현식은 문자열을 다룰 때 강력한 도구이지만, 처음 접하면 복잡해 보일 수도 있습니다. 하지만 기본적인 패턴을 익히고 연습하다 보면 점점 자연스럽게 활용할 수 있게 됩니다.

정규 표현식은 JavaScript, Python, Java 등 다양한 프로그래밍 언어에서 지원되므로, 직접 실습하며 익혀 보세요! 😊

제목과 URL을 복사했습니다