개념 사전 · 개념

정규 표현식

Regex · Regexp · 정규식

은 문자열의 위치··반복·그룹 조건으로 일치하는 부분을 찾는 패턴 언어이다. 부분 추출과 전체 검증의 범위, 엔진·옵션·문자열 인용 규칙에 따라 같은 패턴처럼 보여도 결과가 달라진다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 로그에서 정해진 형태의 필드를 추출한다.
  • 문자열 전체가 허용 형식에 맞는지 검사한다.
  • 일치 범위와 그룹을 이용해 선택적 치환·구조화를 수행한다.

02어떤 순서로 동작하나

  1. 패턴 준비

    호스트 언어의 문자열 해석을 거쳐 엔진에 실제 패턴과 플래그를 전달한다.

  2. 탐색 범위 결정

    · 등 함수 규약에 따라 시작 위치와 전체 일치 요구를 정한다.

  3. 패턴 평가

    ·반복·위치·그룹 조건을 평가하여 일치 구간을 찾거나 실패한다.

  4. 값 검증

    매치 범위·그룹 참여 여부를 확인하고 숫자·주소 등 실제 자료형과 업무 조건은 별도 파서로 검사한다.

03먼저 알아둘 용어와 구성요소

[0-9]는 숫자 한 글자이고 [0-9]+는 하나 이상 이어진 숫자다.
*는 바로 앞 패턴의 0회 이상, +는 1회 이상, ?는 0회 또는 1회, {m,n}은 반복 수의 범위다.
re.는 문자열 안에서 일치가 시작될 수 있는 위치를 탐색한다.
re.match는 문자열 시작에서 시도하고 re.fullmatch는 전체 문자열이 패턴에 맞아야 한다. 따라서 (r"[0-9]+", "port=22")는 22를 찾지만 fullmatch는 전체가 숫자가 아니어서 실패한다.
Match.()의 시작과 끝은 문자열 인덱스이며 끝 위치는 포함하지 않는다. 길이는 end-start로 계산하지만 바이트 길이와 같다고 가정하지 않는다.
str 패턴의 \d는 ASCII 0~9 외의 십진 숫자도 포함한다. 프로토콜이 ASCII 숫자만 허용한다면 [0-9] 또는 적절한 re.ASCII 범위를 선택한다.

04예제로 따라가기

  • 문자열 x=12-AB;에서 12-AB를 부분 추출하면 은 (2,7)이며 길이는 5이다. 같은 패턴의 fullmatch는 앞뒤 문자가 남아 실패한다.
  • 점으로 나뉜 숫자 네 묶음을 찾는 패턴은 999.999.999.999도 잡을 수 있으므로 IP 검증에는 ipaddress 같은 해석기가 필요하다.
  • 선택 그룹 (a)?의 미참여 None과 (a*)가 참여한 빈 문자열은 모두 빈 화면처럼 보일 수 있지만 다른 결과다.

05혼동하기 쉬운 점과 확인 기준

  • MULTILINE은 ^와 $의 줄 경계 의미를 바꾸고 DOTALL은 점의 개행 일치를 바꾼다. 두 옵션을 서로의 대체물로 켜면 예상하지 않은 넓은 일치를 만들 수 있다.
  • 중첩 반복이나 겹치는 대안은 끝부분에서 실패할 때 많은 조합을 다시 시도할 수 있다. 짧은 성공 예제만 통과한 사실은 최대 입력에서의 처리 시간을 증명하지 않는다.
  • re, GNU sed BRE·ERE는 연산자와 옵션의 표기가 다르다. 같은 글자 패턴을 복사한 뒤 결과가 달라지면 엔진·옵션·셸 인용의 세 경계를 따로 확인한다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.