etc/Regex

정규식

TechLogbook 2025. 1. 22. 11:57

정규표현식은 문자열에서 특정 패턴을 찾거나 조작하는 데 사용되는 강력한 도구입니다. 이 글에서는 정규표현식의 개요, 기초 문법, 그리고 실제 적용 예제를 살펴보겠습니다.

## 개요

정규표현식(Regular Expression)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어입니다[2]. 줄여서 정규식(Regex)이라고도 부릅니다. 정규표현식을 사용하면 복잡한 문자열 패턴을 간단하게 표현할 수 있어, 문자열 검색, 치환, 추출 등 다양한 작업에 활용됩니다[1].

주요 용도:
- 이메일, 전화번호 등의 형식 검증
- 특정 패턴을 가진 문자열 추출
- 문자열 치환
- 데이터 정제 및 가공

## 기초 문법

정규표현식의 기본 문법은 다음과 같습니다:

1. **문자 클래스**
   - `[abc]`: a, b, c 중 하나와 일치
   - `[^abc]`: a, b, c를 제외한 문자와 일치
   - `[a-z]`: a부터 z까지의 소문자와 일치

2. **메타 문자**
   - `.`: 임의의 한 문자와 일치
   - `^`: 문자열의 시작
   - `$`: 문자열의 끝
   - `\d`: 숫자와 일치
   - `\w`: 알파벳, 숫자, 언더스코어와 일치
   - `\s`: 공백 문자와 일치

3. **수량자**
   - `*`: 0회 이상 반복
   - `+`: 1회 이상 반복
   - `?`: 0회 또는 1회 반복
   - `{n}`: 정확히 n회 반복
   - `{n,}`: n회 이상 반복
   - `{n,m}`: n회 이상 m회 이하 반복

4. **그룹과 참조**
   - `(...)`: 그룹화 및 캡처
   - `(?:...)`: 그룹화만 하고 캡처하지 않음

5. **선택과 범위**
   - `|`: 또는(OR) 연산자
   - `[...]`: 문자 집합

## 적용 예제

1. **이메일 주소 검증**
   ```
   ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
   ```
   이 패턴은 대부분의 이메일 주소 형식과 일치합니다[3].

2. **전화번호 추출**
   ```
   \d{2,3}-\d{3,4}-\d{4}
   ```
   이 패턴은 한국의 일반적인 전화번호 형식(예: 02-123-4567 또는 010-1234-5678)과 일치합니다[34].

3. **URL 검증**
   ```
   ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
   ```
   이 패턴은 대부분의 URL 형식과 일치합니다[29].

4. **HTML 태그 제거**
   ```
   <([^>]+)>
   ```
   이 패턴을 사용하여 HTML 태그를 찾아 제거할 수 있습니다[27].

5. **비밀번호 복잡성 검사**
   ```
   ^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$
   ```
   이 패턴은 최소 8자 이상이며, 영문자, 숫자, 특수문자를 각각 하나 이상 포함하는 비밀번호와 일치합니다[29].

정규표현식은 강력한 도구이지만, 복잡한 패턴을 작성하거나 해석하는 것이 때로는 어려울 수 있습니다. 따라서 실제 사용 시에는 충분한 테스트와 검증이 필요합니다. 또한, 프로그래밍 언어나 도구에 따라 정규표현식의 문법이 약간씩 다를 수 있으므로 사용하는 환경에 맞는 문법을 확인하는 것이 중요합니다.