DevToolPal
한국어

PCRE 정규식 테스터

실제 PCRE2 엔진으로 PHP / Perl 호환 정규 표현식을 테스트합니다. 재귀, 소유 수량자, \K 등을 지원합니다.

로컬에서 실행, 업로드 없음

옵션

테스트 문자열

0자 · 0 B

결과

결과가 여기에 표시됩니다

기능 소개

PCRE 정규식 테스터는 PHP, Perl 계열 도구, 여러 웹 서버가 쓰는 엔진인 실제 PCRE2 라이브러리로 텍스트에 정규 표현식을 적용해 봅니다. 매치는 하이라이트되고, 각 매치의 위치와 캡처 그룹이 목록으로 표시되며, 치환 문자열을 넣으면 preg_replace 방식의 치환 결과도 보여 줍니다.

실제 엔진으로 테스트하는 것이 중요한 이유는 PCRE와 JavaScript 정규 표현식이 작지만 중요한 부분에서 다르기 때문입니다. 브라우저 기반 테스터에서 잘 되던 패턴이 PHP에서는 컴파일되지 않거나 다른 결과와 매치될 수 있습니다.

사용 방법

  1. PCRE 패턴에 구분자 없이 패턴을 입력합니다.
  2. 검색할 텍스트를 테스트 문자열에 붙여 넣습니다.
  3. 필요한 수정자를 켭니다. 모든 매치(preg_match_all과 같음)는 g, 그리고 i, m, s, x, U, 유니코드를 인식하는 \w, \d, \b는 u입니다.
  4. 치환 결과를 미리 보려면 치환 문자열을 채웁니다. 번호 그룹은 $1 또는 ${1}, 이름 있는 그룹은 ${name}, 전체 매치는 $0을 씁니다.

잘못된 패턴이면 PCRE2 자체의 오류 메시지와 함께 패턴에서 해석이 멈춘 위치를 보여 줍니다.

예시

기본 패턴 \((?:[^()]++|(?R))*\)는 짝이 맞는 괄호를 찾습니다. 괄호가 아닌 문자, 또는 재귀적으로 패턴 전체를 다시 담은 한 쌍의 괄호와 매치됩니다. 예시 텍스트에서는 (a, g(b, c))와 ((x), y)를 찾고 끝의 닫히지 않은 괄호는 무시합니다. JavaScript 정규 표현식으로는 이런 표현이 불가능합니다.

(?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR)에 치환 문자열 ${cur} $1을 넣어 보세요. 두 번째 줄의 금액과 통화 코드 순서가 바뀝니다.

알아 두면 좋은 PCRE 기능

  • 소유 수량자(*+, ++, ?+)와 원자 그룹((?>...))은 한 번 매치한 내용을 되돌려 주지 않으므로 폭주하는 백트래킹을 막아 줍니다.
  • \K — 매치 시작 위치를 재설정합니다. 후방 탐색(lookbehind)의 간단한 대안입니다.
  • (?R), (?1), (?&name)을 쓰는 재귀로 중첩 구조를 매치할 수 있습니다.
  • (?i) 같은 인라인 수정자는 패턴 일부의 동작만 바꿉니다.

팁

  • PHP에서는 패턴을 /.../나 ~...~ 같은 구분자로 감싸는데, 패턴 안에 나오지 않는 문자를 고르면 이스케이프할 필요가 없습니다.
  • 텍스트에 악센트가 붙은 글자나 한중일 문자가 있다면 \w가 이를 매치하도록 u를 켜세요.

자주 묻는 질문

› JavaScript 정규식 테스터와 무엇이 다른가요?

이 페이지는 PHP의 preg_ 함수, Nginx, Apache 등 많은 도구가 쓰는 엔진인 PCRE2를 WebAssembly로 컴파일해 실행합니다. (?R) 재귀, a++ 같은 소유 수량자, 원자 그룹, \K, (?P<name>...) 그룹, x와 U 수정자처럼 JavaScript에 없는 문법을 지원합니다.

› /pattern/i처럼 구분자도 입력해야 하나요?

아니요. 패턴만 입력하고 수정자는 체크박스로 켭니다. PHP의 `preg_match('/\d+/i', $s)`는 패턴 `\d+`에 대소문자 무시를 켠 것과 같습니다.

› "match limit exceeded"가 나오는 이유는 무엇인가요?

일치하지 않는 긴 문자열에 ^(a+)+$를 쓰는 경우처럼, 어떤 패턴은 지수적으로 많은 백트래킹을 일으킵니다. 페이지가 멈추지 않도록 테스터는 500만 단계 후에 중단합니다. PHP에도 pcre.backtrack_limit라는 비슷한 안전장치가 있어, 한도에 걸리면 preg_match가 false를 반환합니다.

› 입력한 텍스트가 업로드되나요?

아니요. PCRE2 WebAssembly 모듈을 한 번 내려받은 뒤에는 모든 처리가 브라우저에서 이루어집니다.