정규 표현식 테스터

정규 표현식(regex)은 텍스트를 매칭하기 위한 패턴입니다. 이 도구는 regex 구문을 분석하고, 패턴 구성 요소를 설명하며, 샘플 텍스트에 대해 매칭을 테스트할 수 있는 영역을 제공합니다. JavaScript, PCRE, Python regex 형식을 지원합니다.

사양

주요 사용 사례

  • regex가 예상 텍스트와 매칭되지 않는 이유 디버깅
  • 설명을 보며 regex 구문 학습
  • 코드에 추가하기 전에 패턴 테스트
  • 폼 필드의 입력 패턴 유효성 검사
  • 구조화된 텍스트(로그, CSV, HTML)에서 데이터 추출

기능

  • regex 형식 감지 (JavaScript /pattern/flags, PCRE #pattern#, Python r"pattern")
  • 패턴 구성 요소를 이해하기 쉬운 언어로 설명
  • 매칭 하이라이트와 함께 샘플 텍스트에 대해 테스트
  • 단일 매칭 또는 전체 매칭 찾기 모드
  • 캡처 그룹과 그 내용 표시
  • 명명된 캡처 그룹 표시
  • 매칭 위치 및 인덱스 표시
  • regex 실행 시간 표시
  • 패턴 기능 배지 (앵커, 수량자 등)
  • 패턴 경고
  • 일반 패턴 라이브러리 (이메일, URL, 전화번호 등)

예제

이메일 패턴

사용해 보기 →

이메일 주소를 매칭하는 regex.

/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/i

HTTP/HTTPS URL을 매칭하는 regex.

/https?:\/\/[^\s]+/g

캡처 그룹이 있는 YYYY-MM-DD 날짜용 regex.

/(\d{4})-(\d{2})-(\d{2})/

  • 프로덕션 전에 온라인 테스터를 사용하여 복잡한 패턴을 디버깅하세요.
  • 특수 문자(. ^ $ * + ? { } [ ] \ | ( ))는 백슬래시로 이스케이프하세요.
  • 명명된 캡처 그룹 (?<name>...)은 매칭 결과를 더 읽기 쉽게 만듭니다.
  • g 플래그는 모든 매칭을 찾습니다. 없으면 첫 번째 매칭만 반환됩니다.
  • 탐욕적 수량자(* +)에 주의하세요. 적절한 경우 비탐욕적(*? +?)을 사용하세요.

이해하기 정규 표현식 테스터

정규 표현식(regex)은 사실상 모든 프로그래밍 언어, 텍스트 편집기, 명령줄 도구에서 사용되는 패턴 매칭 언어입니다. regex는 리터럴 문자와 메타문자의 조합을 사용하여 문자열 클래스에 매칭하는 검색 패턴을 정의합니다. 입력 유효성 검사, 텍스트 추출, 검색 및 바꾸기 작업, 로그 분석에 필수적입니다.

핵심 구문에는 문자 클래스([a-z], \\d, \\w, \\s), 수량자(*, +, ?, {n,m}), 앵커(^, $, \\b), 교대(|), 괄호를 사용한 그룹화가 포함됩니다. 캡처 그룹은 매칭된 하위 문자열을 추출하고 역참조를 가능하게 합니다. 전방 탐색 (?=...)과 후방 탐색 (?<=...)은 문자를 소비하지 않고 위치를 매칭하여 주변 컨텍스트에 대한 복잡한 어서션을 가능하게 합니다.

JavaScript regex에는 고유한 플레이버와 특정 플래그가 있습니다: g(전역), i(대소문자 무시), m(멀티라인), s(dotAll), u(Unicode), y(스티키). u 플래그는 Unicode 텍스트를 올바르게 처리하기 위해 점점 더 중요해지고 있습니다. 없으면 패턴이 멀티바이트 문자를 올바르게 매칭하지 못할 수 있습니다. 명명된 캡처 그룹 (?<name>...)은 번호 매겨진 그룹보다 가독성을 향상시킵니다.

일반적인 regex 작업에는 이메일 유효성 검사, URL 파싱, 구조화된 텍스트(로그 파일, CSV)에서 데이터 추출, 코드 리팩토링에서의 패턴 대체가 포함됩니다. 그러나 regex에는 한계가 있습니다 -- HTML이나 JSON과 같은 중첩 구조를 파싱할 수 없으며(적절한 파서를 사용하세요), 지나치게 복잡한 패턴은 읽기 어렵고 유지보수하기 어렵게 됩니다. "이제 두 개의 문제가 생겼다"는 농담은 복잡한 regex의 실제 유지보수 과제를 반영합니다.

HTML은 중첩 구조를 가진 문맥 자유 언어이며 정규 표현식으로는 근본적으로 처리할 수 없습니다. regex는 임의의 중첩 깊이를 가진 열림 태그와 닫힘 태그를 올바르게 매칭할 수 없습니다. 단순한 경우는 작동하는 것처럼 보일 수 있지만 중첩된 태그, >를 포함하는 속성, 주석이 관련된 에지 케이스에서 실패합니다. HTML 처리에는 브라우저의 DOMParser, Node.js의 cheerio, Python의 BeautifulSoup과 같은 DOM 파서를 사용하세요.

.*(탐욕적)과 .*?(게으른) 수량자의 차이는 매칭 동작에 중요합니다. 탐욕적 .*는 가능한 한 많은 문자를 매칭하고 필요한 경우 역추적합니다. 게으른 .*?는 가능한 한 적은 문자를 매칭합니다. "<b>하나</b><b>둘</b>"과 같은 문자열에서 탐욕적 패턴 <b>.*</b>는 전체 문자열을 매칭하지만, 게으른 패턴 <b>.*?</b>는 첫 번째 "<b>하나</b>"만 매칭합니다. 잘못된 모드를 선택하는 것은 예상치 못한 regex 동작의 가장 흔한 원인 중 하나입니다.

JavaScript에서 u 플래그(/pattern/u)는 Unicode 인식 매칭을 활성화합니다. 없으면 메타문자 .는 기본 다국어 평면 외부의 문자(이모지 등)를 매칭하지 않고, \\w는 ASCII 단어 문자만 매칭합니다. u 플래그는 수량자와 문자 클래스가 서로게이트 쌍을 올바르게 처리하게 하고 \\p{Letter}와 같은 Unicode 속성 이스케이프를 활성화합니다. 전방 탐색 (?=...)과 후방 탐색 (?<=...)은 위치에서 패턴을 확인하되 매칭에 포함하지 않는 제로 너비 어서션입니다. 긍정 전방 탐색 (?=...)은 뒤에 무엇이 와야 하는지를 주장하고, 부정 전방 탐색 (?!...)은 뒤에 무엇이 오면 안 되는지를 주장합니다. 예를 들어, \\d+(?= dollars)는 " dollars"가 뒤따르는 숫자를 매칭하지만 숫자 자체만 캡처합니다. 후방 탐색은 같은 방식으로 작동하지만 앞에 있는 텍스트를 확인합니다.

← 전체 도구로 돌아가기