정규표현식, 첫걸음 (개념과 꼭 알아야 할 기본 문법)
안녕하세요, 아이홀입니다!
오늘은 '정규표현식'이라는 쬐끔은 어렵게 들리지만, 알고 보면 완전 유용한 기술에 대해서 이야기해 볼까 합니다. 💻
1. 정규표현식이 대체 뭔데요? 🤔
혹시 엑셀이나 워드 같은 프로그램에서 특정 단어를 찾거나 바꾸는 '찾기/바꾸기' 기능 써보신 적 있으세요?
정규표현식(Regular Expression, 줄여서 Regex 또는 Regexp)은 이 '찾기/바꾸기' 기능을 엄청나게 똑똑하고 유연하게 만들어 주는 도구라고 생각하시면 돼요!
단순히 안녕하세요 같은 '특정 문자열'을 찾는 게 아니라, '어떤 패턴'을 가진 문자열을 찾아내고 조작하는 데 쓰이는 '마법 같은 문자열 조합'이 바로 정규표현식입니다. 복잡하게 섞여 있는 글자들 속에서 내가 원하는 규칙을 가진 정보만 쏙쏙 골라낼 때 이만한 게 없지요!
마치 비밀 암호 해독하는 것 같달까요? 😊
- 수많은 텍스트 데이터 속에서 전화번호만 쫙 뽑아내고 싶을 때!
- 이메일 주소 형식에 맞는지 아닌지 확인하고 싶을 때!
- 특정 패턴의 단어를 일괄적으로 바꾸고 싶을 때!
이런 상황에서 정규표현식이 아주 큰 힘을 발휘한답니다!
2.정규표현식의 기본 문법들 🛠️
정규표현식은 몇 가지 약속된 기호들(메타문자라고 불러요!)을 가지고 패턴을 만들어 나갑니다.
처음에는 낯설지만, 몇 가지만 알아두면 꽤나 유용하게 쓸 수 있어요!
(1) 딱! 이 글자:
가장 기본적인 건 내가 찾는 문자를 그냥 그대로 쓰는 거예요.
예를 들어 a라고 쓰면 a라는 문자 하나를 찾는 패턴이 됩니다. hello라고 쓰면 hello라는 문자열을 그대로 찾죠.
(2) 모든 것을 대신하는 마법사, . (점):
마침표(점)는 아주 중요한 친구예요. . 하나는 '어떤 문자든 하나'를 의미합니다. (단, 줄바꿈 문자는 제외에요!)
- 예시:
a.c- 이 패턴은
abc,adc,axc같이 'a로 시작하고 c로 끝나는데, 그 사이에 아무 글자나 하나 있는 경우'를 모두 찾아요!
- 이 패턴은
(3) 특별한 녀석들을 위한 기호: \d, \w, \s
데이터 다루다 보면 숫자, 글자, 공백 같은 특별한 덩어리를 자주 찾게 되죠? 이럴 때 쓰는 전용 기호들이 있어요!
\d: digit의 약자. 숫자(0부터 9까지) 하나를 의미합니다.- 예시:
\d\d\d->123,456,789같은 세 자리 숫자를 찾아요.
- 예시:
\w: word character의 약자. 알파벳, 숫자, 밑줄(_) 중 하나를 의미합니다.- 예시:
\w\w\w->abc,123,my_같은 것들을 찾을 수 있어요.
- 예시:
\s: space의 약자. 공백(띄어쓰기, 탭, 줄바꿈) 중 하나를 의미합니다.- 예시:
a\sb->a b,a\tb(탭) 같은 경우를 찾아요.
- 예시:
(4) 범위를 정해주는 착한 친구들: [] (문자 클래스)
만약 'a, b, c 중에서 하나만' 찾고 싶다면 어떻게 할까요? 이럴 때 대괄호 []를 씁니다. 이걸 '문자 클래스'라고 불러요!
[abc]: 'a', 'b', 'c' 중 하나를 찾아요.[0-9]: '0'부터 '9'까지의 숫자 중 하나를 찾아요. (\d랑 같아요!)[a-zA-Z]: 모든 알파벳 (대문자/소문자) 중 하나를 찾아요.
(5) 시작과 끝을 알리는 깃발: ^와 $
문자열의 특정 위치를 지정하고 싶을 때 쓰는 기호들도 있어요!
^: 문자열의 시작을 의미합니다.- 예시:
^abc-> 'abc'로 시작하는 문자열만 찾아요. (abcde는 되지만,xabc는 안 돼요!)
- 예시:
$: 문자열의 끝을 의미합니다.- 예시:
abc$-> 'abc'로 끝나는 문자열만 찾아요. (xabc는 되지만,abcde는 안 돼요!)
- 예시:
(6) 얼마나 반복될까요? *, +, ?, { } (수량자)
찾으려는 문자가 '몇 번' 나타나는지도 정해줄 수 있어요!
*: 0번 이상 반복 (없어도 되고, 많이 있어도 됨!)- 예시:
ab*c->ac(b가 없어도 됨),abc,abbbc
- 예시:
+: 1번 이상 반복 (최소 한 번은 있어야 함!)- 예시:
ab+c->abc,abbbc(ac는 안 됨!)
- 예시:
?: 0번 또는 1번 반복 (있어도 되고, 없어도 됨!)- 예시:
ab?c->ac,abc
- 예시:
{n}: 정확히 n번 반복- 예시:
\d{4}-> 정확히 네 자리 숫자 (1234,5678)
- 예시:
{n,}: 최소 n번 이상 반복- 예시:
\d{3,}-> 세 자리 이상 숫자 (123,12345)
- 예시:
{n,m}: 최소 n번, 최대 m번 반복- 예시:
\d{2,4}-> 두 자리에서 네 자리 사이 숫자 (12,123,1234)
- 예시:
3. 간단한 실전 예제! 🧪
그럼 위에 배운 것들로 간단한 패턴을 만들어 볼까요?
- 네 자리 숫자 찾기:
\d{4}(우편번호나 비밀번호 일부 찾을 때) - 간단한 이메일 형식:
\w+@\w+\.\w+- (
\w+: 알파벳, 숫자, _ 가 1개 이상) - (
@: 골뱅이) - (
\.: 점 (점은 특별한 기호라서\를 붙여줘야 해요!)) - 이렇게만 봐도 벌써 복잡해 보이죠? 하지만 나름의 규칙이 보이실 겁니다!
- (
[요약표]
| [abc] | a/b/c 중 하나 고르기 | gr[ae]y → gray, grey |
| [a-z] | a부터 z까지 중 1개(범위) | [a-z]{3} → 소문자 3글자 |
| [0-9] | 숫자 1개 | [0-9]{4} → 4자리 숫자(예: 2025) |
| [^"] | 큰따옴표가 아닌 글자 1개(제외) | "[^"]+" → 따옴표 안 내용 |
| \d | digit(숫자) | \d+ → 숫자 덩어리 |
| \w | word(영문/숫자/_) | \w+ → 단어처럼 붙은 문자들 |
| \s | space(공백: 스페이스·탭·줄바꿈) | \s+ → 연속 공백 |
| \D / \W / \S | 각각 숫자/단어문자/공백의 반대 | \D+ → 숫자 아님 |
| ^ / $ | 줄 시작 / 줄 끝 | ^Title, end$ |
| \b | 단어 경계(틈) | \bcat\b → cat(단어)만 |
| ? | 0~1회(있어도 되고 없어도 됨) | colou?r → color/colour |
| + | 1회 이상 | \d+ → 숫자 1자리 이상 |
| * | 0회 이상 | \w* → 0개 이상 |
| {n} | 정확히 n번(중괄호=횟수) | \d{4} → 숫자 4번 |
| {m,} | m번 이상 | \d{2,} → 2자리 이상 |
| {m,n} | m~n번 | \d{2,4} → 2~4자리 |
| +? | 1회 이상을 ‘최소로’(짧게) | ".?" → 첫 따옴표 쌍만 |
| ? | 0회 이상을 ‘최소로’ | ".*?" → 과매칭 방지 |
| {m,n}? | m~n번을 ‘최소로’ | \d{2,4}? → 필요한 만큼만 |
| ( ) | 묶기(그룹; 기억 가능) | (cat|dog) |
| (?: ) | 묶기만(기억 X) | (?:ab)+ |
| | | 또는(OR) | cat|dog|fox |
| "([^"]+)" | 큰따옴표 안 내용 캡처 | “hello world” → hello world |
| (?=원) | 앞쪽 확인: 뒤에 ‘원’이 있으면 | \d+(?=원) → 금액 숫자만 |
| (?<=ERR) | 뒤쪽 확인: 앞이 ‘ERR’이면 | (?<=ERR)\d{3} |
| \t \n \r \f | 탭/줄바꿈/캐리지/폼피드 | 제어 문자 찾기 |
| \. \* \+ \? \[ \] \( \) \| \^ \ $ \{ \} | 특수기호 자체 찾기(앞에 \ 붙임) | a\.b → 문자 그대로 a.b |
마치며... 🚶♀️
정규표현식은 처음 접하면 굉장히 어렵고 복잡하게 느껴질 수 있어요.
하지만 오늘 배운 몇 가지 기본 문법만 잘 익혀두셔도 데이터를 다루는 능력이 확! 올라갈 거예요.
다음 편에서는 오늘 배운 기본기를 바탕으로 '자주 쓰이는 실전 패턴'과 더 많은 활용 팁을 들고 올게요!
그때까지 궁금한 점 있으시면 언제든 댓글 남겨주이소!
다음 글에서 또 만나요! 👋
♥읽어주셔서 감사합니다♥
티스토리 댓글과 공감♥은 로그인이 필요 없습니다.
로그인하시면 구독 가능합니다.
'IT Lab > 코드 크래프트' 카테고리의 다른 글
| 정규표현식, 고수로 가는 길 (고급 기능과 성능 최적화 전략) (1) | 2025.09.19 |
|---|---|
| 정규표현식, 실전 활용 꿀팁 (자주 쓰는 패턴과 응용 사례) (0) | 2025.09.17 |
| 티스토리 관리자에서 글 URL 한 번에 추출하고, 파이썬으로 제목 자동 매핑·파싱하기 (3) | 2025.08.29 |
| [Wi-Fi] QR Code Generator-무선접속 QR코드 생성 (10) | 2020.12.07 |
| [F5] L4스위치 Log 확인 방법 (13) | 2020.11.26 |
| [Cisco] ACS 인증서버 admin password 변경 방법(CLI) (2) | 2020.10.07 |
| [Cisco] Archive Backup Falure_ %ARCHIVE_CONFIG-4-ARCHIVE_SKIPPED (0) | 2020.06.24 |
| [Cisco] NX-OS Auto Config Backup (EEM) (0) | 2020.04.28 |