본문 바로가기

IT Lab/코드 크래프트

정규표현식, 실전 활용 꿀팁 (자주 쓰는 패턴과 응용 사례)

728x90
반응형

정규표현식, 실전 활용 꿀팁 (자주 쓰는 패턴과 응용 사례)


안녕하세요, 아이홀입니다! 정규표현식 두 번째 시간으로 다시 찾아왔습니다!
지난 1편에서는 정규표현식이 뭔지, 그리고 점(.), 역슬래시(\d, \w, \s), 대괄호([ ]), 수량자(*, +, ?, {}) 같은 기본 문법들을 배워봤죠! 오늘은 그 지식을 바탕으로 실생활에서 진짜 자주 쓰이는 정규표현식 패턴들과 응용 사례를 통해 정규표현식의 진짜 '힘'을 한번 느껴볼 거예요!
 
 

1. 넌 어디까지 탐욕스럽니? '탐욕적' vs '게으른' 매칭 (Greedy vs. Lazy)

 
정규표현식으로 어떤 패턴을 찾을 때, '이만큼 찾을까, 저만큼 찾을까?' 하고 고민하는 순간이 있습니다.
기본적으로 정규표현식은 '탐욕적(Greedy)'으로 작동합니다.이게 무슨 말이냐고요?

  • 탐욕적 매칭 (Greedy Matching): 가능한 한 가장 길게 매칭합니다.
    • 예시: 문자열 "<a><b>" 에서 /<.*>/ ( <로 시작하고 .아무거나 *0번 이상 반복되고 >로 끝나는 패턴)
      • 결과: <a><b> (전체를 다 찾아버림)
    • 보통 *, +, {} 같은 수량자는 기본적으로 탐욕적으로 작동합니다.
  • 게으른 매칭 (Lazy Matching): 가능한 한 가장 짧게 매칭합니다.
    • 탐욕적인 수량자 뒤에 ?를 붙여주면 게으른 매칭으로 바뀝니다.
    • 예시: 문자열 "<a><b>" 에서 /<.*?>/
      • 결과: <a>, <b> (각각 가장 짧은 패턴을 찾음)
    • 이 '게으른' 옵션은 HTML 태그처럼 시작과 끝이 명확한 쌍을 찾을 때 아주 유용하답니다!

 
 

2. 묶어서 잡아라! 그룹과 캡처링

 

소괄호 ()는 정규표현식에서 엄청 중요한 역할을 합니다!

  • 그룹핑 (Grouping): 여러 문자를 하나의 단위로 묶어줍니다.
    • 예시: (ab)+ -> 'ab' 문자열이 한 덩어리로 반복되는 것을 찾아요. (ab, abab, ababab...)
  • 캡처링 (Capturing): 묶은 패턴 중에서 특정 부분을 '따로 저장'할 수 있게 해줍니다. 이건 찾기뿐만 아니라 '바꾸기' 할 때나 특정 부분만 추출할 때 빛을 발합니다!
    • 예시: 이름과 전화번호를 매칭시키고 싶을 때 (\w+) - (\d+) (이름과 번호를 각각 캡처)

 

3. 이것도 되고 저것도 되는! 선택 (OR)

 

파이프 기호 |는 '이것 또는 저것' 이라는 의미로 사용됩니다. 여러 패턴 중 하나만 매칭될 때 유용해요.

  • 예시: apple|banana -> 'apple'이 있거나 'banana'가 있는 경우를 찾아요.
  • 예시: (grape|berry) juice -> 'grape juice' 또는 'berry juice'를 찾아요.

 

정규표현식, 실전 활용 예제 💡


이제 실제 상황에서 자주 사용되는 패턴들을 예시와 함께 살펴볼까요?
 
예제 1: 전화번호 찾기 (휴대폰 번호)

대한민국 휴대폰 번호는 보통 '010-XXXX-XXXX' 형태죠.

  • 패턴: 010-\d{4}-\d{4}
    • 010-: '010-'을 그대로 찾고
    • \d{4}: 숫자 4자리를 각각 찾아요.
  • 응용: 하이픈 없이 붙어있는 전화번호 (010XXXXXXXX)도 찾으려면?
    • 패턴: 010-?\d{4}-?\d{4} (?가 0번 또는 1번 반복이니까 하이픈이 없어도 매칭됨!)
      • 여기서 010\d{8} 형태로 쓸 수도 있겠죠? 더 짧지만, 가독성은 떨어질 수 있습니다.

예제 2: 간단한 이메일 주소 형식 검증


사용자이름@도메인.최상위도메인 형태의 이메일을 간단하게 검증해볼까요?

  • 패턴: \w+@\w+\.\w+
    • \w+: 알파벳, 숫자, '_'가 1개 이상 (사용자이름, 도메인 부분)
    • @: '@' 문자 그대로
    • \.: 점(.)은 메타문자이므로 앞에 \를 붙여줘야 해요.

예제 3: HTML 태그 안의 내용 추출


<b>중요한 내용</b> 같은 HTML 태그에서 '중요한 내용'만 쏙 뽑아내고 싶을 때.

  • 문자열: 저는 <b>매우 중요한</b> 정보를 발견했습니다.
  • 패턴: <b>(.*?)</b>
    • <b>: 태그를 찾고
    • (.*?): . (아무 문자)가 * (0번 이상) 반복되는데, ? (게으르게) 매칭!
    • </b>: 태그를 찾아요.
    • ()로 묶었으니 캡처링 그룹으로 '매우 중요한'이라는 내용만 쏙 뽑아낼 수 있습니다!

 
예제 4: 날짜 형식 찾기 (YYYY-MM-DD)

'2023-10-26' 같은 날짜 형식을 찾아봅시다.

  • 패턴: \d{4}-\d{2}-\d{2}
    • \d{4}: 4자리 숫자 (년도)
    • \d{2}: 2자리 숫자 (월, 일)
    • -: 하이픈 그대로

 

마치며... 🚶‍♂️


오늘은 정규표현식의 탐욕적/게으른 매칭, 그룹핑, 그리고 선택(|)과 함께 실전에서 자주 쓰이는 패턴들을 살펴봤습니다.

어떠세요? 생각보다 어렵지 않게 데이터에서 원하는 정보를 쏙쏙 뽑아낼 수 있다는 걸 느끼셨으면 좋겠어요
정규표현식은 진짜 '연습'이 제일 중요합니다! 오늘 배운 패턴들을 가지고 이것저것 조합해보면서 '아, 이렇게 쓰는 거구나!' 하고 직접 익혀보시는 걸 강력 추천드려요!
다음 3편에서는 정규표현식을 더 능숙하게 다룰 수 있는 고급 기술들을 가지고 돌아오겠습니다.
궁금한 점은 언제든 댓글로 남겨주세요!
다음에 또 만나요! 👋
 
 
 
읽어주셔서 감사합니다
티스토리 댓글과 공감은 로그인이 필요 없습니다.
로그인하시면 구독 가능합니다.
 
 

728x90
반응형