C.W.K.
Stream
Lesson 01 of 10 · published

텍스트에서 패턴 찾는 문제

~10 min · intro, motivation, use-cases

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

왜 텍스트 모양 전용 작은 언어가 필요했나

4 GB 짜리 로그 파일이 있고, IP 주소 뒤에 5xx HTTP 상태가 붙은 줄을 다 찾아야 한다고 해 봐. 파이썬 스크립트로 짜면 — 줄 split, 세 번째 컬럼 파싱, IP 인지 체크, 상태가 5 로 시작하는지 체크. 코드 20줄 박고, 컬럼 인덱스 디버깅에 30분 날려.

아니면 \b\d+\.\d+\.\d+\.\d+\b.*\b5\d{2}\b 한 줄 써서 ripgrep 으로 흘려. 한 줄. 0.5초.

정규식이 존재하는 이유가 바로 이 갭이야 — 질문이 "이 모양인 문자열이 어느 거?" 일 때, 손으로 파싱하는 건 오버킬이거든. 정규식은 패턴 문법이야. 텍스트 모양만 묘사하는 작은 언어.

정규식이 진짜 잘하는 세 가지

검색. "이 더미에서 X 모양인 거 다 찾아." 에디터, IDE, 로그 분석기, 보안 스캐너.

유효성 검증. "이 문자열 전체가 X 모양 맞아?" 폼 필드, config 파서, 라우트 매칭.

추출 + 치환. "이 문자열에서 X 만 빼" 또는 "X 를 다 Y 로 바꿔." 데이터 정제, code mod, 빌드 스크립트.

이 리스트에 *없는* 거 봐: 중첩 구조 파싱, 의미 추적, HTML 이나 JSON. 트랙 끝에서 이 한계 다시 짚어줄게.

Code

정규식 없이 짠 스크립트·python
# IP 주소 + 5xx 상태가 같이 있는 줄 찾기
import re_disabled  # 정규식이 없다고 치고

with open('access.log') as f:
    for line in f:
        parts = line.split()
        if len(parts) < 9:
            continue
        ip = parts[0]
        status = parts[8]
        # 이제 IP 검증기 만들고 상태 체크하고...
        # 코드 20줄 더, off-by-one 버그 3개.
정규식으로 같은 일·bash
# 한 줄. 4 GB 파일을 몇 초 만에 흘려.
rg '\b\d+\.\d+\.\d+\.\d+\b.*\b5\d{2}\b' access.log

External links

Exercise

아무 텍스트 파일 (로그, CSV export, 채팅 로그) 열어서 — 거기서 찾고 싶은 *모양* 세 개 골라봐. 전화번호, 날짜, URL, 대문자로 시작하는 이름. 각각에 대해 그 모양을 영어/한국어 한 문장으로 *정확하게* 묘사해 봐. 이 quest 나머지가 그 문장들을 패턴으로 번역하는 훈련이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.