728x90
1. 그룹화 기본 ()
기본 그룹화
패턴: (abc)+
설명: 'abc'를 하나의 그룹으로 처리하여 반복
매칭:
- "abc"
- "abcabc"
- "abcabcabc"
그룹화의 장점
- 반복 수량자 적용 가능
- 그룹 전체를 하나의 단위로 처리
- 캡처된 값을 나중에 참조 가능
2. 캡처 그룹과 비캡처 그룹
캡처 그룹
패턴: ([a-z]+)-(\d+)
설명: 문자열과 숫자를 각각 캡처
예제:
텍스트: "order-123"
캡처 결과:
- 그룹 1: "order"
- 그룹 2: "123"
비캡처 그룹 (?:)
패턴: (?:[a-z]+)-(\d+)
설명: 문자열은 캡처하지 않고 숫자만 캡처
예제:
텍스트: "order-123"
캡처 결과:
- 그룹 1: "123"
3. 역참조 사용법
기본 역참조
패턴: ([a-z])\1
설명: 같은 문자가 연속으로 두 번 나타나는 패턴
매칭:
- "aa", "bb", "cc"
비매칭:
- "ab", "cd"
HTML 태그 매칭
패턴: <([a-z]+)>.*?</\1>
설명: 열린 태그와 닫힌 태그가 일치하는지 확인
매칭:
- "<div>content</div>"
- "<span>text</span>"
비매칭:
- "<div>content</span>"
4. 이름 있는 그룹
기본 문법
패턴: (?<name>[a-z]+)
설명: 그룹에 이름을 부여하여 참조
실제 예제
패턴: (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
설명: 날짜 형식에서 각 부분에 이름 부여
매칭:
텍스트: "2024-02-12"
캡처 결과:
- year: "2024"
- month: "02"
- day: "12"
5. 그룹 내 선택자 (|)
기본 사용법
패턴: (cat|dog)
설명: cat 또는 dog 매칭
매칭:
- "cat"
- "dog"
비매칭:
- "bird"
복잡한 선택 패턴
패턴: (https?|ftp)://([^/\r\n]+)(/[^\r\n]*)?
설명: URL 프로토콜, 도메인, 경로 매칭
매칭:
- "http://example.com"
- "https://example.com/path"
- "ftp://server.com"
728x90
6. 실습 예제
예제 1: 이메일 주소 파싱
패턴: (?<username>[a-zA-Z0-9._%+-]+)@(?<domain>[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})
설명:
- username: 로컬 파트
- domain: 도메인 부분
테스트:
"user@example.com"
결과:
- username: "user"
- domain: "example.com"
예제 2: HTML 태그 속성 추출
패턴: <(?<tag>[a-z]+)(?<attrs>\s+[^>]+)?>
설명:
- tag: 태그 이름
- attrs: 속성들
테스트:
"<div class="container" id="main">"
결과:
- tag: "div"
- attrs: ' class="container" id="main"'
예제 3: 전화번호 형식 변환
패턴: (\d{3})-(\d{4})-(\d{4})
치환: ($1) $2-$3
설명: 전화번호 형식 변경
입력: "010-1234-5678"
출력: "(010) 1234-5678"
7. 실습 문제
문제 1: 반복되는 단어 찾기
패턴: \b(\w+)\s+\1\b
설명: 연속으로 반복되는 단어 찾기
테스트:
- "the the" (매칭)
- "hello world" (비매칭)
문제 2: 올바른 괄호 쌍 확인
패턴: \(([^()]*)\)
설명: 중첩되지 않은 괄호와 그 내용 매칭
테스트:
- "(hello)" (매칭)
- "((hello))" (부분 매칭)
- "hello)" (비매칭)
문제 3: CSV 데이터 파싱
패턴: (?<field>[^,\n]*),(?<value>[^,\n]*)
설명: CSV 형식의 필드와 값 추출
테스트:
"name,John"
결과:
- field: "name"
- value: "John"
728x90
'IT 개발 > 정규식' 카테고리의 다른 글
[정규식 마스터하기] Part 7: 특수 패턴과 이스케이프 (47) | 2025.02.19 |
---|---|
[정규식 마스터하기] Part 6: 전방/후방 탐색 (60) | 2025.02.18 |
[정규식 마스터하기] Part 4: 앵커와 경계 (41) | 2025.02.16 |
[정규식 마스터하기] Part 3: 수량자와 반복 (46) | 2025.02.15 |
[정규식 마스터하기] Part 2: 기본 패턴과 문자 클래스 (43) | 2025.02.14 |