본문 바로가기

IT Lab/코드 크래프트

정규표현식, 첫걸음 (개념과 알아야 할 기본 문법)

728x90
반응형

정규표현식, 첫걸음 (개념과 꼭 알아야 할 기본 문법)
 
안녕하세요, 아이홀입니다!
오늘은 '정규표현식'이라는 쬐끔은 어렵게 들리지만, 알고 보면 완전 유용한 기술에 대해서 이야기해 볼까 합니다. 💻
 

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

 

 

마치며... 🚶‍♀️

 
정규표현식은 처음 접하면 굉장히 어렵고 복잡하게 느껴질 수 있어요.
하지만 오늘 배운 몇 가지 기본 문법만 잘 익혀두셔도 데이터를 다루는 능력이 확! 올라갈 거예요.
 
다음 편에서는 오늘 배운 기본기를 바탕으로 '자주 쓰이는 실전 패턴'과 더 많은 활용 팁을 들고 올게요!
그때까지 궁금한 점 있으시면 언제든 댓글 남겨주이소!
다음 글에서 또 만나요! 👋
 
 
 
읽어주셔서 감사합니다
티스토리 댓글과 공감은 로그인이 필요 없습니다.
로그인하시면 구독 가능합니다.
 
 

728x90
반응형