본문 바로가기
C.W.K.
Stream
Lesson 08 of 10 · published

정규표현식 기초

~15 min · regex, patterns

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

여러 텍스트 도구가 공유하는 패턴 언어

정규표현식은 grep, sed, awk, 편집기와 프로그래밍 언어에서 문자열의 모양을 표현해. 기본 개념은 비슷하지만 도구마다 지원 문법과 이스케이프 규칙이 달라. 패턴이 어느 정규식 방언으로 해석되는지, 셸 인용이 먼저 적용되는지 함께 확인해야 같은 표현을 다른 도구로 옮길 때 뜻이 바뀌지 않아.

문자와 위치를 표현하는 기본 요소

  • .: 보통 줄바꿈을 제외한 글자 하나와 맞아.
  • [abc]: a, b, c 가운데 하나와 맞는 문자 클래스야.
  • [^abc]: 나열한 문자 이외의 글자 하나와 맞아.
  • [a-z]: 범위를 표현하지만 로케일에 따라 의미가 달라질 수 있어.
  • ^$: 줄의 시작과 끝을 가리켜.
  • \b, \d, \w: PCRE 계열에서 단어 경계, 숫자, 단어 문자를 표현해. POSIX 도구에서는 그대로 지원되지 않을 수 있어.

반복 횟수를 수량자로 적어

  • *: 앞 요소가 0번 이상 나타나.
  • +: 1번 이상 나타나. ERE나 PCRE에서 사용해.
  • ?: 0번 또는 1번 나타나.
  • {3}: 정확히 세 번 나타나.
  • {2,5}: 두 번에서 다섯 번 사이로 나타나.

BRE에서는 일부 기호 앞에 백슬래시가 필요하므로 같은 패턴을 grepgrep -E에서 비교해 봐.

그룹과 선택으로 더 큰 단위를 만들어

(foo|bar)는 foo 또는 bar를 선택하고, ([0-9]+)처럼 괄호로 묶은 부분은 구현에 따라 캡처 그룹이 돼. 치환식의 \1 같은 역참조는 앞에서 잡은 값을 다시 사용할 수 있어. 그룹, 선택, 역참조의 표기는 방언마다 다르므로 도구의 문서를 기준으로 삼아.

BRE, ERE, PCRE를 구분해

  • BRE: 전통적인 grep과 sed의 기본 문법이야. 일부 연산자는 백슬래시가 필요해.
  • ERE: grep -E, sed -E에서 쓰며 그룹과 선택을 더 직접적으로 표현해.
  • PCRE: 전방·후방 탐색, 이름 있는 그룹 등 더 많은 기능을 제공하지만 모든 grep 구현이 -P를 지원하지는 않아.

“정규식”이라는 이름 하나로 호환성을 가정하지 말고 실행 도구와 버전을 기록해.

실전 패턴은 검증 범위를 설명해야 해

[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}
\b([0-9]{1,3}\.){3}[0-9]{1,3}\b
[0-9]{4}-[0-9]{2}-[0-9]{2}
[[:space:]]+$

이 패턴들은 이메일처럼 보이는 문자열, IPv4처럼 보이는 문자열, ISO 날짜 모양과 줄 끝 공백을 찾는 필터야. 주소의 실제 존재나 IP 숫자의 유효 범위까지 보장하지는 않아. 형식 후보를 찾는 정규식과 의미를 검증하는 파서를 분리해.

Code

grep -E로 패턴 테스트·bash
echo 'visit https://example.com today' \
  | grep -oE 'https?://[A-Za-z0-9./_-]+'
echo '2026-04-15: meeting at 10:00' \
  | grep -oE '\d{4}-\d{2}-\d{2}'
echo 'a1b2c3' | grep -oE '[a-z][0-9]'

External links

Exercise

시험 메모에서 URL을, 시험 로그에서 ISO 날짜를 정규식으로 추출해. 추출 결과를 정렬하고 중복을 제거한 뒤, 민감하지 않은 축약 표본만 시각화 도구에 넣어 패턴의 각 부분이 무엇과 일치하는지 확인해.

Progress

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

댓글 0

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

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