일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- git pat
- DBMS
- JPA
- codeium
- pat발급
- 데이터내보내기
- Python
- macvlan
- 도커이미지
- spring
- ANTIFRAGILE
- 오블완
- 르세라핌
- 애널리틱스4
- 자바
- 명령어
- analytics4
- docker push
- 11월순위
- 컬렉션프레임워크
- docker build
- gtihub
- JPQL
- java
- 티스토리챌린지
- docker
- git branch 삭제
- db종류
- IntelliJ
- Today
- Total
hanker
정규식이란 ..? (정규 표현식, Regular Expression, Regex) 본문
프로그래밍이나, 데이터베이스 관리에서 문자열 처리의 중요한 도구로 사용되는 정규식에 대해서 알아보자.
추천사이트
실시간으로 정규식을 작성하고 테스트할 수 있는 사이트
정규식이란? (정규 표현식, Regular Expression, Regex)
정규식은 문자열의 패턴을 정의하는 특별한 문자열이다. 이를 통해 특정 형식의 문자열을 검색, 대체, 추출할 수 있다.
주로 사용되는 용도는
패턴매칭 | 텍스트에서 특정 패턴이 포함되어 있는지 확인 |
검색 및 치환 | 문자열 내 특정 패턴을 찾아 다른 텍스트로 치환 |
추출 | 문자열에서 특정 부분을 추출 |
검증 | 사용자 입력이 특정 형식을 따르는지 확인 |
위 용도의 예제는 밑에서 알아보자
정규식의 주요 구성 요소
정규식의 기본 요소와 사용법을 간단하게 알아보자
- 리터럴 문자 : 패턴에 있는 문자 그대로와 일치
- 메타 문자 : 정규식에서 특별한 의미를 가지는 문자
- 문자 클래스
- 수량자
- 이스케이스 시퀀스 : 특수 문자를 이스케이프하여 문자 그대로 사용하기 위해 사용
구성 요소 | 설명 | 예제 | 일치하는 문자열 |
. | 임의의 한 문자와 일치 | a.c | abc, a1c, a_c |
^ | 문자열의 시작을 의미 | ^abc | abc (문자열의 시작) |
$ | 문자열의 끝을 의미 | abc$ | abc (문자열의 끝) |
* | 0회 이상 반복 | ab* | a, ab, abb, abbb |
+ | 1회 이상 반복 | ab+ | ab, abb, abbb (단, a는 불일치) |
? | 0회 또는 1회 반복 | ab? | a, ab |
` | OR 연산자 | OR 연산자 | `abc |
[] | 문자 클래스(지정된 문자 중 하나와 일치) | [abc] | a, b, c |
[^] | 부정된 문자 클래스 | [^abc] | a, b, c 이외의 모든 문자 |
[a-z] | 문자 범위 | [a-z] | 소문자 알파벳 (a부터 z) |
\d | 숫자 (0-9)와 일치 | \d | 0, 1, 9 등 |
\w | 단어 문자 (알파벳, 숫자, 밑줄) | \w | a, Z, 0, _ |
\s | 공백 문자 (스페이스, 탭, 줄바꿈) | \s | 스페이스, 탭 등 |
\. | 이스케이프 문자 | \. | 실제 . 문자 |
() | 그룹핑 및 캡처 그룹 | (abc)+ | abc, abcabc |
{n} | 정확히 n회 반복 | a{3] | aaa |
{n,} | n회 이상 반복 | a{2,} | aa, aaa, aaaa |
{n,m} | 최소 n회, 최대 m회 반복 | a{2,3} | aa, aaa |
(?=...) | Lookahead (앞쪽 일치 검사) | foo(?=bar) | foo (뒤에 bar가 오는 경우만) |
(?<=...) | Lookbehind (뒤쪽 일치 검사) | (?<=foo)bar | bar (앞에 foo가 있는 경우만) |
고급기능
- Lookahead: 특정 패턴이 뒤에 오는지 확인하지만, 그 패턴을 캡처하지 않는다.
예: foo(?=bar)는 foobar에서 foo와 일치하지만 foo만 캡처
- Lookbehind: 특정 패턴이 앞에 오는지 확인하지만, 그 패턴을 캡처하지 않는다.
예: (?<=foo)bar는 foobar에서 bar와 일치.
- 탐욕적(*, +, {n,}): 가능한 최대 범위까지 매칭합니다.
- 비탐욕적(*?, +?, {n,}?): 가능한 최소 범위까지 매칭합니다.
정규식 예제
- 이메일 주소 검증:이메일 주소의 형식이 맞는지 확인
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
- 전화번호 포맷팅 (숫자만 추출):숫자가 아닌 모든 문자를 찾아 제거
\D
- 문자열의 특정 단어 찾기:word라는 단어가 전체 단어로서 포함된 경우만 찾음
\bword\b
정규식의 한계
- 복잡도: 정규식은 유연하지만 복잡한 패턴을 이해하고 유지보수하기 어렵움
- 성능: 매우 복잡한 정규식은 성능 저하를 유발
- 가독성: 직관적으로 이해하기 어려울 수 있으므로 주석을 추가하거나 간단하게 유지하는 것이 좋다.
끝으로
굳이 정규식을 사용하지 않아도 다양한 기술과 방법들이 있다보니, 관리나 유지보수가 어려운 정규식을 사용한 예를 보기 어렵다.
정규식을 무조건 사용해야 한다기 보다 적재적소에 맞게 개발 프로세스에 적용시켜가며 개발 스펙트럼을 넓히는게 중요하다고 본다.
'DEVELOPER INFO' 카테고리의 다른 글
소프트웨어 아키텍처 : Antifragile 에 대해서 (0) | 2024.11.15 |
---|---|
2024년 11월 TIOBE 선정: 가장 인기 있는 프로그래밍 언어 10선 (Go) (0) | 2024.11.15 |
MariaDB 접속 명령어 변경 (mysql: command not found) (1) | 2024.10.29 |
인공지능 - 생성 AI란 무엇일까? (7) | 2024.10.26 |
웹 개발을 보다 더 쉽게 도와주는 7가지 CSS 프레임워크 (4) | 2024.10.25 |