728x90
1. 기본 수량자 (*, +, ?)
* (애스터리스크) - 0회 이상 반복
패턴: ab*c
설명: a로 시작하고 c로 끝나며, b는 0번 이상 반복될 수 있음
매칭 예제:
- "ac" (b가 0번)
- "abc" (b가 1번)
- "abbc" (b가 2번)
- "abbbc" (b가 3번)
+ (플러스) - 1회 이상 반복
패턴: ab+c
설명: a로 시작하고 c로 끝나며, b는 1번 이상 반복되어야 함
매칭 예제:
- "abc" (b가 1번)
- "abbc" (b가 2번)
- "abbbc" (b가 3번)
비매칭:
- "ac" (b가 없음)
? (물음표) - 0회 또는 1회
패턴: ab?c
설명: a로 시작하고 c로 끝나며, b는 있어도 되고 없어도 됨
매칭 예제:
- "ac" (b가 없음)
- "abc" (b가 1번)
비매칭:
- "abbc" (b가 2번)
2. 중괄호를 사용한 정확한 반복 횟수 지정
{n} - 정확히 n번 반복
패턴: a{3}
매칭: "aaa"
비매칭: "aa", "aaaa"
{n,} - n번 이상 반복
패턴: a{2,}
매칭: "aa", "aaa", "aaaa"
비매칭: "a"
{n,m} - n번 이상 m번 이하 반복
패턴: a{2,4}
매칭: "aa", "aaa", "aaaa"
비매칭: "a", "aaaaa"
3. 탐욕적(Greedy) vs 게으른(Lazy) 수량자
탐욕적 수량자 (기본)
패턴: ".*"
문자열: "Hello World"
결과: "Hello World" (전체 문자열 매칭)
패턴: "<.+>"
문자열: "<h1>제목</h1>"
결과: "<h1>제목</h1>" (전체 태그 매칭)
게으른 수량자 (수량자 뒤에 ? 추가)
패턴: ".*?"
문자열: "Hello World"
결과: "" (빈 문자열 매칭)
패턴: "<.+?>"
문자열: "<h1>제목</h1>"
결과: "<h1>" (첫 번째 태그만 매칭)
728x90
4. 실전 예제와 연습문제
예제 1: HTML 태그 매칭
텍스트: "<div>내용1</div><p>내용2</p>"
탐욕적 패턴: <.*>
결과: "<div>내용1</div><p>내용2</p>" (전체 매칭)
게으른 패턴: <.*?>
결과: "<div>", "</div>", "<p>", "</p>" (개별 태그 매칭)
예제 2: 전화번호 형식 검증
패턴: ^\d{2,3}-\d{3,4}-\d{4}$
설명:
- ^\d{2,3}: 시작이 2-3자리 숫자
- -\d{3,4}: 중간이 3-4자리 숫자
- -\d{4}$: 끝이 4자리 숫자
매칭:
- "02-123-4567"
- "010-1234-5678"
비매칭:
- "2-12-1234"
- "010-12-12345"
예제 3: 이메일 주소 검증
패턴: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
설명:
- [a-zA-Z0-9._%+-]+: 로컬 파트
- @: 구분자
- [a-zA-Z0-9.-]+: 도메인
- \.[a-zA-Z]{2,}: 최상위 도메인
매칭:
- "user@example.com"
- "user.name+tag@example.co.kr"
비매칭:
- "@example.com"
- "user@.com"
5. 실습 문제
문제 1: 주민등록번호 형식 검증
패턴: \d{6}-[1-4]\d{6}
설명:
- \d{6}: 생년월일 6자리
- -: 하이픈
- [1-4]: 성별 구분 번호
- \d{6}: 나머지 6자리
테스트:
- "901231-1234567" (매칭)
- "901231-5234567" (비매칭)
문제 2: 파일명에서 이미지 확장자 찾기
패턴: \w+\.(jpg|jpeg|png|gif)$
설명:
- \w+: 파일명
- \.: 점
- (jpg|jpeg|png|gif): 이미지 확장자
- $: 문자열 끝
테스트:
- "image.jpg" (매칭)
- "photo.png" (매칭)
- "document.pdf" (비매칭)
문제 3: URL 매칭
패턴: https?:\/\/[\w\-.]+(:\d+)?(\/\S*)?
설명:
- https?: http 또는 https
- \/\/: //
- [\w\-.]+: 도메인
- (:\d+)?: 포트번호(선택사항)
- (\/\S*)?: 경로(선택사항)
테스트:
- "https://example.com" (매칭)
- "http://localhost:8080" (매칭)
- "ftp://example.com" (비매칭)
728x90
'IT 개발 > 정규식' 카테고리의 다른 글
[정규식 마스터하기] Part 5: 그룹과 캡처 (21) | 2025.02.17 |
---|---|
[정규식 마스터하기] Part 4: 앵커와 경계 (41) | 2025.02.16 |
[정규식 마스터하기] Part 2: 기본 패턴과 문자 클래스 (43) | 2025.02.14 |
[정규식 마스터하기] Part 1: 정규식 기초와 소개 (72) | 2025.02.13 |
[정규식 마스터하기] 10부작 시리즈 (70) | 2025.02.12 |