-
정규표현식(Regex)이란?Back-End/Language 2024. 4. 16. 21:55반응형
정규표현식은 문자열을 처리할 때 매우 유용하며, 복잡해 보일 수 있지만 기본적인 구성 요소를 이해하면 쉽게 다룰 수 있습니다. 여기 정규표현식의 기본 패턴과 사용법을 간단하게 요약해 봅니다.
기본 문자
- .: 임의의 단일 문자와 일치합니다.
- ^: 문자열의 시작과 일치합니다.
- $: 문자열의 끝과 일치합니다.
문자 클래스
- [abc]: 괄호 안의 어느 한 문자(a, b, 또는 c)와 일치합니다.
- [^abc]: 괄호 안의 어느 문자도 아닌 모든 문자와 일치합니다.
- [a-z]: a부터 z 사이의 모든 소문자와 일치합니다.
- \d: 숫자와 일치합니다. [0-9]와 동일합니다.
- \w: 단어 문자(word character)와 일치합니다. [a-zA-Z0-9_]와 동일합니다.
- \s: 공백 문자와 일치합니다.
수량자
- *: 바로 앞의 요소가 0회 이상 일치합니다.
- +: 바로 앞의 요소가 1회 이상 일치합니다.
- ?: 바로 앞의 요소가 0회 또는 1회 일치합니다.
- {n}: 바로 앞의 요소가 정확히 n회 일치합니다.
- {n,}: 바로 앞의 요소가 n회 이상 일치합니다.
- {n,m}: 바로 앞의 요소가 최소 n회, 최대 m회 일치합니다.
그룹화 및 참조
- (abc): 괄호 안의 패턴을 그룹으로 묶습니다. 이를 통해 여러 패턴을 하나의 단위로 처리할 수 있습니다.
- |: OR 조건을 나타냅니다. 예를 들어, a|b는 a 또는 b와 일치합니다.
이스케이프
- \: 특수 문자를 이스케이프하여 리터럴 문자로 사용할 수 있게 합니다. 예를 들어, \., \* 등입니다.
플래그
정규표현식은 다양한 플래그와 함께 사용할 수 있으며, 플래그에 따라 검색 동작이 달라집니다.
- g: 전역 검색을 수행합니다.
- i: 대소문자를 구분하지 않고 검색합니다.
- m: 여러 줄 모드를 활성화합니다.
정규표현식 예시
1. 이메일 주소 검증
^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$
이 정규표현식은 대부분의 표준 이메일 주소 형식을 검증합니다. 여기서 \w+는 하나 이상의 단어 문자를 의미하고, [\.-]?는 점이나 대시가 0회 또는 1회 나타날 수 있음을 나타냅니다.
2. URL 검증
^(http|https)://[^\s/$.?#].[^\s]*$
이 정규표현식은 http 또는 https로 시작하는 유효한 URL을 찾습니다. [^\s/$.?#]는 공백, 슬래시, 달러 기호, 물음표, 점, 또는 해시 기호를 제외한 문자를 의미합니다.
3. IP 주소 검증 (IPv4)
\b(?:\d{1,3}\.){3}\d{1,3}\b
이 정규표현식은 각 옥텟이 0에서 255 사이인 IPv4 주소를 검증합니다. \b는 단어 경계를 나타내고, \d{1,3}는 1에서 3자리의 숫자를 의미합니다.
4. 날짜 형식 검증 (YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
이 정규표현식은 YYYY-MM-DD 형식의 날짜를 검증합니다. 여기서 \d{4}는 4자리 숫자(연도)를 의미하고, (0[1-9]|1[0-2])는 01에서 12 사이의 숫자(월)를 검증합니다.
5. HTML 태그 찾기
<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)
이 정규표현식은 HTML 문서에서 태그를 찾습니다. 여기서 ([a-z]+)는 태그 이름을 찾고, <\/\1>는 같은 태그 이름의 닫는 태그를 찾습니다.
6. 전화번호 검증
^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$
이 정규표현식은 다양한 형식의 미국 전화번호를 검증합니다. 여기서 \(?와 \)?는 괄호가 있거나 없을 수 있음을 의미하고, [-. ]?는 숫자 사이에 대시, 점, 또는 공백이 올 수 있음을 나타냅니다.
7. 비밀번호 복잡성 검증
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
이 정규표현식은 최소 8자 이상이고, 적어도 하나의 문자와 하나의 숫자를 포함하는 비밀번호를 검증합니다.
8. 신용카드 번호 검증
^(?:4[0-9]{12}(?:[0-9]{3})? # Visa
| 5[1-5][0-9]{14} # MasterCard
| 3[47][0-9]{13} # American Express
| 3(?:0[0-5]|[68][0-9])[0-9]{11} # Diners Club
| 6(?:011|5[0-9]{2})[0-9]{12} # Discover
| (?:2131|1800|35\d{3})\d{11} # JCB )$
이 정규표현식은 주요 신용카드 회사의 카드 번호 형식을 검증합니다.
9. 사용자 이름 검증
^[a-z0-9_-]{3,16}$
이 정규표현식은 3자에서 16자 사이의 소문자, 숫자, 밑줄, 또는 대시로 구성된 사용자 이름을 검증합니다.
10. 코드 주석 찾기
\/\/.*|\/\*[\s\S]*?\*\/
이 정규표현식은 C나 Java 같은 프로그래밍 언어에서 단일 라인(//) 또는 멀티 라인(/* */) 주석을 찾습니다.
정규표현식은 강력한 도구이지만, 너무 복잡한 패턴이나 과도한 백트래킹을 포함할 경우 성능 문제를 일으킬 수 있으므로 주의해서 사용해야 합니다.
반응형'Back-End > Language' 카테고리의 다른 글
byte는 왜 사용하나요? (java, golang) (1) 2024.11.19 클로저(Closure)란? (0) 2024.04.05