[regex] 정규식을 어떻게 디버깅합니까? [닫은]
정규 표현식은 상당히 복잡해질 수 있습니다. 공백이 없으면 읽기가 어렵습니다. 디버거를 사용하여 정규 표현식을 밟을 수는 없습니다. 그렇다면 전문가들은 복잡한 정규식을 어떻게 디버깅합니까?
답변
RegexBuddy를 구매 하고 내장 된 디버그 기능을 사용 합니다 . 1 년에 두 번 이상 정규식으로 작업하면 시간을 절약 할 수 있습니다. RegexBuddy는 단순하고 복잡한 정규 표현식을 작성하고 다양한 언어로 코드를 생성 할 수 있도록 도와줍니다.
또한 개발자에 따르면이 도구는 WINE과 함께 사용할 때 Linux에서 거의 완벽하게 실행됩니다 .
답변
Perl 5.10에서 use re 'debug';
. (또는 debugcolor
스택 오버플로에서 출력 형식을 올바르게 지정할 수 없습니다.)
$ perl -Mre = debug -e ' "foobar"= ~ / (.) \ 1 /' REx "(.) \ 1"컴파일 중 최종 프로그램 : 1 : OPEN1 (3) 3 : REG_ANY (4) 4 : CLOSE1 (6) 6 : REF1 (8) 8 : 끝 (0) 민렌 1 "foobar"와 REx "(.) \ 1"일치 0 <> <foobar> | 1 : OPEN1 (3) 0 <> <foobar> | 3 : REG_ANY (4) 1 <f> <oobar> | 4 : CLOSE1 (6) 1 <f> <oobar> | 6 : REF1 (8) 실패한... 1 <f> <oobar> | 1 : OPEN1 (3) 1 <f> <oobar> | 3 : REG_ANY (4) 2 <fo> <obar> | 4 : CLOSE1 (6) 2 <fo> <obar> | 6 : REF1 (8) 3 <foo> <bar> | 8 : END (0) 성공! REx 해제 : "(.) \ 1"
또한, 당신은 할 수 그들을 더 읽을 수 있도록 정규 표현식에에 공백과 주석을 추가 할 수 있습니다. Perl에서는 /x
수정자를 사용하여 수행됩니다 . 으로 pcre
는이 PCRE_EXTENDED
플래그.
"foobar" =~ /
(.) # any character, followed by a
\1 # repeat of previously matched character
/x;
pcre *pat = pcre_compile("(.) # any character, followed by a\n"
"\\1 # repeat of previously matched character\n",
PCRE_EXTENDED,
...);
pcre_exec(pat, NULL, "foobar", ...);
답변
답변
정규식에 갇 히면 일반적으로
https://regexr.com/
문제가있는 곳을 빠르게 테스트하기에 적합합니다.
답변
나는 Kodos -The Python Regular Expression Debugger를 사용합니다.
Kodos는 Python 프로그래밍 언어에 대한 정규식을 작성, 테스트 및 디버깅하기위한 Python GUI 유틸리티입니다. Kodos는 개발자가 파이썬에서 정규 표현식을 효율적이고 쉽게 개발할 수 있도록 도와야합니다. Python의 정규 표현식 구현은 PCRE 표준을 기반으로하기 때문에 Kodos는 PCRE 표준 (Perl, PHP 등)을 준수하는 다른 프로그래밍 언어의 개발자에게 이점을 제공해야합니다.
(…)
Linux, Unix, Windows, Mac에서 실행됩니다.
답변
나는 그렇지 않다고 생각합니다. 정규식이 너무 복잡하고 디버거가 필요한 시점에서 문제가되는 경우 특정 구문 분석기를 작성하거나 다른 방법을 사용해야합니다. 훨씬 더 읽기 쉽고 유지 보수가 쉬울 것입니다.
답변
훌륭한 무료 도구 인 Regex Coach가 있습니다. 최신 버전은 Windows에서만 사용할 수 있습니다. 저자 Edmund Weitz 박사는 Linux 버전을 다운로드하는 사람이 너무 적기 때문에 Linux 버전 유지 관리를 중단했지만 다운로드 페이지에 Linux의 이전 버전이 있습니다.