정규 표현 엔진 비교
Comparison of regular expression engines정규 표현 엔진의 비교입니다.
라이브러리
이름. | 공식 웹사이트 | 프로그래밍 언어 | 소프트웨어 라이선스 | 사용처 |
---|---|---|---|---|
Boost. Regex[Note 1] | C++ 라이브러리 활성화 | C++ | 부스트 | 메모장++>= 6.0.0, EmEditor |
Boost.Xpressive | C++ 라이브러리 활성화 | C++ | 부스트 | |
DELX | RegExLab | C++ | 개인 및 상업용 무료 사용 | |
FREJ[Note 2] | Java의 퍼지 정규 표현식 | 자바 | LGPL | |
GLIB/GREgex[Note 3] | GLIB 참조 매뉴얼 | C | LGPL | |
그레타 | 마이크로소프트 리서치 | C++ | 마이크로소프트 | |
구렉스 | 그로브 주식회사 | RTL, HLS | 독자 사양 | FPGA는 사이버 보안, 금융, 전자상거래 업계를 위한 100기가비트/초 이상의 regex 엔진을 가속했습니다. |
RXP | 타이탄 IC | RTL | 독자 사양 | ASIC, FPGA 및 클라우드에 사용할 수 있는 RegEx를 사용하여 하드웨어 가속 검색 가속화를 지원합니다.초고속으로 대규모 병렬 콘텐츠 처리를 가능하게 합니다. |
하이퍼스캔 | 인텔(R) | C, x86 고유의 어셈블리(SSE3+)[1] | 3절 BSD | 스팸 |
ICU | Unicode의 국제 컴포넌트 | C, C++[Note 4] | ICU | Foundation (Apple 및 Swift 오픈 소스 버전) |
자카르타 정규판 | 아파치 자카르타 프로젝트 | 자바 | 아파치 | |
java.disc.regex | Java 사용자 매뉴얼 | 자바 | GNU GPLv2(Classpath 예외 포함) | j편집 |
JRegex | JRegex | 자바 | BSD | |
매트랩 | 정규 표현 | MATLAB 언어 | MATLAB, 테크니컬 컴퓨팅 언어 | |
오니구루마 | 코사코 | C | BSD | ATOM, Take Command Console, Tera Tera Term, TextMate, SubEthaEdit, EmEditor 및 jq |
팻투 | 스테보소프트 | Java(Java 1.0과 호환) | LGPL | |
PCRE | pcre.org | C, C++[Note 5] | BSD | Apache HTTP 서버, Nginx, BBEdit, Julia, HHVM, 메모장++ < 6.0.0, PHP, Delphi, R, Exim SWI-Prolog |
Qt/QRegExp | 디지아 | C++ | Qt GNU GPL v.3.0, | 케이트, 킬레 |
regex - 헨리 스펜서의 정규 표현 라이브러리 | Arg 리스트 | C | BSD | |
RE2 | RE2 | C++ | BSD | Go, Google Sheets, Gmail, G Suite |
헨리 스펜서의 고급 정규식 | TCL | C | BSD | |
RGX | RGX | C++ 기반 컴포넌트 라이브러리 | P6R | |
서브레그 | 맷 벅널 | C | MIT | |
TPerlRegEx | TPerlRegEx VCL 컴포넌트 | 오브젝트 파스칼 | MPLv1.1 | |
트레이[주2] | 빌 로리카리 | C | BSD | 뮤슬 |
TRegExpr | RegExp Studio | 오브젝트 파스칼 | 듀얼 라이선스: 프리웨어 또는 LGPL (스태틱 링크 제외) | 총사령관 |
XRegExp | XRegExp | 자바스크립트 | MIT | |
울프람어(수학) | 울프람 언어 문서 센터 | 울프람어 | 매스매티카, 울프람 개발 플랫폼 |
언어들
언어 | 공식 웹사이트 | 소프트웨어 라이선스 | 언급 |
---|---|---|---|
액션 스크립트 3 | ActionScript 테크놀로지 센터 | 공짜 | |
APL(APLX, Dyalog, GNU) | APL Wiki | 각 실장별로 라이선스가 부여 | ⎕SS (PCRE),⎕R /⎕S (PCRE),⎕SS (PCRE2), 각각 |
C++11(C++) | C++ 표준 웹사이트 | 각 실장별로 라이선스가 부여 | ISO14822:2011(e) 이후 ECMAScript on default와 유사(문법 설명) |
D | D | 소프트웨어 라이선스 활성화[주 1] | |
가세요 | Golang.org | BSD 스타일의 | |
하스켈 | Haskell.org | BSD3 | 언어 보고서 및 GHC 계층 라이브러리에서 생략됨 |
자바 | 자바 | GNU 일반 공중 라이선스 | RE는 소스 코드의 문자열로 작성됩니다.모든 백슬래시는 2배로 해야 하기 때문에 가독성이 저하됩니다. |
JavaScript(ECMAScript) | ECMA-262 | BSD3 | 제한적이지만 RE는 특정 언어를 가진 퍼스트 클래스 시민입니다./.../mod 구문을 사용합니다. |
줄리아. | JuliaLang.org | MIT 라이선스 | RE는 PCRE 빌트인을 사용하는 언어 코어 라이브러리의 일부이며 (C 코드) ICU용 래퍼(옵션)를 사용할 수 있습니다. |
루아 | Lua.org | MIT 라이선스 | 간결하고 제한된 언어를 사용합니다.PCRE나 LPeg와 같은 대체 파서 등 보다 강력한 라이브러리에 바인딩할 수 있습니다. |
매스매티카 | 울프람 | 독자 사양 | |
.그물 | MSDN | MIT 라이선스[주2][주3] | |
님 | nim-lang.org | MIT 라이선스 | 표준 라이브러리에는 PCRE 기반의 re 및 nre 모듈뿐만 아니라 다양한 대안(strutils, pegs(Parsing Expression Grammarch matching), strscans, parseutils 등)이 포함됩니다. |
Free Pascal (오브젝트 Pascal) | www.freepascal.org | LGPL(스태틱링크 예외 포함) | Free Pascal 2.6+는 Sorokin 및 다른 두 개의 정규 표현 라이브러리에서 TRegExpr과 함께 제공됩니다. wiki.lazarus.freepascal.org/Regexpr을 참조하십시오. |
OCaml | 캠 | LGPL | 2010년 현재[update] 표준 모듈은 일반적으로 [2]권장되지 않는 것으로 간주되고 있습니다.많은 경우 권장 라이브러리는 pcre(PCRE를 완전히 지원하는 것)와 re(PCRE, Perl, Posix, Emacs, 쉘글로빙과 같은 일반적인 구문에 프런트엔드를 제공합니다)입니다. |
펄 | Perl.com | Artistic License 또는 GNU General Public License | 언어의 전체 중심 부분 |
PHP | PHP.net | PHP 라이선스 | 2개의 구현이 있으며, PCRE가 보다 효율적인 속도로 기능합니다. |
POSIX C(C) | POSIX.1 웹 퍼블리케이션 | 각 실장별로 라이선스가 부여 | POSIX BRE 및 ERE 구문 지원 |
파이썬 | python.org | Python 소프트웨어 Foundation 라이센스 | Python은 두 가지 주요 구현이 있습니다. 빌트인 re와 regex 라이브러리입니다. |
루비 | ruby-doc.org | GNU 라이브러리 General Public License | Ruby 1.8, Ruby 1.9 및 Ruby 2.0 이후 버전은 다른 엔진을 사용합니다.Ruby 1.9는 오니구루마, 루비 2.0을 통합하고 나중에 오니구루마의 포크인 오니구모를 통합합니다. |
녹 | docs.rs | MIT 라이선스 | 기본 regex 상자는 look-around 식을 허용하지 않습니다.오니그라고 하는 오니구루마 바인딩이 있습니다. |
SAP ABAP | SAP.com | 독자 사양 | |
TCL | tcl.tk | Tcl/Tk 라이선스 (BSD 스타일) | Tcl 라이브러리는 정규 표현 라이브러리의 역할을 합니다. |
울프람어 | 울프람 리서치 | 독자 사양: Wolfram Development 플랫폼에서 제한된 규모로 무료로 사용 가능 | |
XML 스키마 | W3C | 각 실장별로 라이선스가 부여 | |
XPath 3/XQuery | W3C | 각 실장별로 라이선스가 부여 |
- ^ "STD.regex - D Programming Language - Digital Mars".
- ^ "Dotnet/Corefx". GitHub. 16 February 2022.
- ^ "Dotnet/Corefx". GitHub. 16 February 2022.
언어 기능
메모: 정규 표현을 지원하기 위해 라이브러리를 사용하는 응용 프로그램은 라이브러리의 모든 기능을 반드시 제공하는 것은 아닙니다.예를 들어 PCRE를 사용하는 GNU grep은 PCRE를 사용하는 GNU grep은 룩어헤드 지원을 제공하지 않습니다.
파트 1
"+" 수량자 | 부정 문자 클래스 | 비욕정량자 [주 1] | 수줍은 그룹 [주2] | 재귀 | 미리 보다 | 뒤돌아보다 | 백레퍼런스 [주3] | 9개 이상의 인덱스 가능한 캡처 | |
---|---|---|---|---|---|---|---|---|---|
Boost. Regex | 네. | 네. | 네. | 네. | 네, 그렇습니다[Note 4]. | 네. | 네. | 네. | 네. |
Boost.Xpressive | 네. | 네. | 네. | 네. | 네, 그렇습니다[Note 5]. | 네. | 네. | 네. | 네. |
CL-PPCRE | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 네. |
EmEditor | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 아니요. |
FREJ | 아니요[Note 6]. | 아니요. | 일부[Note 6] | 네. | 아니요. | 아니요. | 아니요. | 네. | 네. |
GLIB/GREgex | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. |
GNU grep | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | ? |
하스켈 | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 네. |
RXP | 네. | 네. | 네. | 네. | 아니요. | 아니요. | 아니요. | 네. | 네. |
ICU 정규식 | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 네. |
자바 | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 네. |
JavaScript(ECMAScript) | 네. | 네. | 네. | 네. | 아니요. | 네. | 네, 그렇습니다[Note 7]. | 네. | 네. |
JG소프트 | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 네. |
루아 | 네. | 네. | 일부[Note 8] | 아니요. | 아니요. | 아니요. | 아니요. | 네. | 아니요. |
.그물 | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 네. |
OCaml | 네. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 네. | 아니요. |
PCRE | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. |
펄 | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. |
PHP | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. |
파이썬 | 네. | 네. | 네. | 네. | 네, 그렇습니다[Note 9]. | 네. | 네. | 네. | 네. |
Qt/QRegExp | 네. | 네. | 네. | 네. | 아니요. | 네. | 아니요. | 네. | 네. |
RE2 | 네. | 네. | 네. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 네. |
루비 / 오니그모 | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 네. |
트레이 | 네. | 네. | 네. | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. |
VIM | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 아니요. |
RGX | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 네. |
TCL | 네. | 네. | 네. | 네. | 아니요. | 네. | 네. | 네. | 네. |
TRegExpr | 네. | ? | 네. | ? | ? | ? | ? | ? | ? |
XML 스키마 | 네. | 네. | 아니요. | 없음 | 아니요. | 아니요. | 아니요. | 아니요. | 없음 |
XPath 3/XQuery | 네. | 네. | 네. | 네. | 아니요. | 아니요. | 아니요. | 네. | 네. |
XRegExp | 네. | 네. | 네. | 네. | 아니요. | 네. | 아니요. | 네. | 네. |
- ^ 기본값이 아닌 가능한 한 적은 수의 문자만 일치시킵니다.오래된 POSIX 이전 엔진의 상당수는 욕심이 없고 탐욕스러운 수량화도 전혀 없었습니다.
- ^ 비캡처 그룹이라고도 하는 샤이 그룹은 백레퍼런스와 함께 참조할 수 없습니다.비캡처 그룹은 나중에 그룹의 컨텐츠에 액세스할 필요가 없는 경우 일치 속도를 높이기 위해 사용됩니다.
- ^ 백레퍼런스를 사용하면 regex 및/또는 치환 문자열(해당하는 경우)의 후반부에서 이전에 일치한 그룹을 참조할 수 있습니다.예를 들어 ([ab]+)\1은 "abab"과 일치하지만 "abaab"은 일치하지 않습니다.
- ^ "Perl Regular Expression Syntax - 1.47.0".
- ^ "User's Guide - 1.47.0".
- ^ a b FREJ에는 반복 수량자가 없지만 단순한 "?" 수량자와 유사한 "옵션" 요소가 있습니다.
- ^ ES2018 기준
- ^ Lua의 유일한 욕심 없는 수식어는
-
의 비호환 버전입니다.*
이 버전에는, 의 비욕적인 버전은 없습니다.+
또는?
전자의 경우 토큰 뒤에 이어지는 반복을 통해 비점수 효과를 얻을 수 있습니다.-
단, 후자의 경우 동등한 것은 없습니다. - ^ 옵션 regex 라이브러리에서만 지원됩니다.
파트 2
지시 사항 [주 1] | 조건 | 원자 그룹 [주2] | 명명된 캡처 [주3] | 평. | 임베디드 | Unicode 속성 지원 | 그룹 밸런싱 [주4] | 가변 길이 뒷면 [주 5] | |
---|---|---|---|---|---|---|---|---|---|
Boost. Regex | 네. | 네. | 네. | 네. | 네. | 아니요. | 일부[Note 6] | 아니요. | 아니요. |
Boost.Xpressive | 네. | 아니요. | 네. | 네. | 네. | 아니요. | 아니요. | 아니요. | 아니요. |
CL-PPCRE | 네. | 네. | 네. | 네. | 네. | 네. | 일부[Note 6] | 아니요. | 아니요. |
EmEditor | 네. | 네. | ? | ? | 네. | 아니요. | ? | 아니요. | 아니요. |
FREJ | 아니요. | 아니요. | 네. | 네. | 네. | 아니요. | ? | 아니요. | 아니요. |
GLIB/GREgex | 네. | 네. | 네. | 네. | 네. | 아니요. | 일부[Note 6] | 아니요. | 아니요. |
GNU grep | 네. | 네. | ? | 네. | 네. | 아니요. | 아니요. | 아니요. | 아니요. |
하스켈 | ? | ? | ? | ? | ? | 아니요. | 아니요. | 아니요. | 아니요. |
RXP | 네. | 네. | 아니요. | 네. | 네. | 아니요. | 아니요. | 아니요. | 아니요. |
ICU 정규식 | 네. | 아니요. | 네. | 네, 그렇습니다[Note 7]. | 네. | 아니요. | 네. | 아니요. | 아니요. |
자바 | 네. | 아니요. | 네. | 네, 그렇습니다[Note 8]. | 네. | 아니요. | 일부[Note 6] | 아니요. | 아니요. |
JavaScript(ECMAScript) | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 일부[Note 6][Note 9][4] | 아니요. | 아니요. |
JG소프트 | 네. | 네. | 네. | 네. | 네. | 아니요. | 일부[Note 6] | 아니요. | 네. |
루아 | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. |
.그물 | 네. | 네. | 네. | 네. | 네. | 아니요. | 일부[Note 6] | 네. | 네. |
OCaml | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. |
PCRE | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 아니요. | 아니요. |
펄 | 네. | 네. | 네. | 네. | 네. | 네. | 네. | 아니요. | 아니요[Note 10]. |
PHP | 네. | 네. | 네. | 네. | 네. | 아니요. | 아니요. | 아니요. | 아니요. |
파이썬 | 네. | 네. | 네, 그렇습니다[Note 11]. | 네. | 네. | 아니요. | 네, 그렇습니다[Note 12]. | 아니요. | 네, 그렇습니다[Note 11]. |
Qt/QRegExp | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. |
RE2 | 네. | 아니요. | ? | 네. | 아니요. | 아니요. | 일부[Note 6] | 아니요. | 아니요. |
루비 / 오니그모 | 네. | 네. | 네. | 네. | 네. | 네. | 일부[Note 6] | 아니요. | 아니요. |
TCL | 네. | 아니요. | 네. | 아니요. | 네. | 아니요. | 네. | 아니요. | 아니요. |
트레이 | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | ? | 아니요. | 아니요. |
VIM | 네. | 아니요. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 네. |
RGX | 네. | 네. | 네. | 네. | 네. | 아니요. | 네. | 아니요. | 아니요. |
XML 스키마 | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 아니요. |
XPath 3/XQuery | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 아니요. |
XRegExp | 선행만 | 아니요. | 아니요. | 네. | 네. | 아니요. | 네. | 아니요. | 아니요. |
- ^ 플래그 수식자, 모드 수식자 또는 옵션 문자라고도 합니다.패턴의 예: "(?i:test)
- ^ 독립 하위 표현식이라고도 합니다.
- ^ 백 참조와 비슷하지만 인덱스 대신 이름이 사용됩니다.
- ^ 재귀 없이 균형 잡힌 구조를 일치시킬 수 있는 특수 기능입니다.
- ^ 후방에서 수량화를 포함할 수 있으므로 그 길이를 예측할 수 없습니다.
- ^ a b c d e f g h i Unicode 속성 지원이 불완전할 수 있습니다(제품은 계속 업데이트됩니다!).새로운 Unicode 리비전이 출시되면 준수하도록 업데이트될 때까지 모두 완료되지 않습니다.
- ^ ICU55부터 이용 가능.
- ^ JDK7부터 이용 가능.
- ^ 속성의 지원 및 범위는 구현에 따라 달라집니다.
- ^ v5.29.9에서 시험 지원이 추가되었습니다.
- ^ a b 옵션 regex 라이브러리에서만 지원됩니다.
- ^ 3.3 이후 버전의 Python과 함께 사용할 경우 regex 라이브러리에서만 사용할 수 있습니다.
API 기능
UTF-16[Note 1] 네이티브 지원 | UTF-8[Note 1] 네이티브 지원 | 복수행 매칭 | 부분[Note 2] 일치 | |
---|---|---|---|---|
Boost. Regex | 아니요. | 아니요. | 네. | 네. |
GLIB/GREgex | 네. | 네. | 네. | 네. |
RXP | 네. | 네. | 아니요. | 네. |
ICU 정규식 | 네. | 아니요. | 네. | ? |
자바 | 아니요. | 부분적[Note 3] | 네. | 네. |
.그물 | 아니요[Note 4]. | 네. | 네. | ? |
PCRE | 네, 그렇습니다[Note 5]. | 네. | 네. | 네. |
Qt/QRegExp | 네. | 아니요. | 아니요. | ? |
TCL | 네. | 네, 그렇습니다[Note 6]. | 네. | ? |
트레이 | 네. | 네. | 네. | ? |
RGX | 아니요. | 아니요. | 네. | ? |
wxWidgets: wxRegEx[Note 7] | 네. | 네. | 네. | ? |
XRegExp | 네. | ? | 네. | ? |
- ^ a b 명시적 변환 없이 형식을 내부적으로 사용할 수 있음을 의미합니다.
- ^ 정규 표현식 전체의 부분 일치.예를 들어 패턴 " 입니다.*END$"는 모든 문자열과 부분적으로 일치하지만 END로 끝나는 문자열만 완전히 일치합니다.[1].
- ^ 2003년부터;JDK7에 최근 계획을 유니 코드 6.0(2011년)지원 등 유니 코드 4.0표준을 지원합니다.[2].
- ^ 그래서 64chars 총(16의 1,112,064 캐릭터인 것 같)을 도입, 원래 UCS-2 support/features을 사용한다.마이크로 소프트 developer-representative"것이다를 해결할"는 2010년에 이것을 버그 리포트 대답했다.[3].
- ^ 버전 8시 30분부터.
- ^ 도구 명령 언어 시설 UTF-8및에서로 개종을 포함합니다.
- ^ WxRegEx 어떤 시스템이나 아니면 유니 코드 방식에 헨리 스펜서의 도서관을 사용하여 사용 가능한 POSIX도서관 공급을 사용한다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Getting Started — Hyperscan 5.4.0 documentation".
- ^ "Regex - Regular Expressions in OCaml".
- ^ "UTS #18: Unicode Regular Expressions".
- ^ "ECMA-262, 9th edition, June 2018 ECMAScript® 2018 Language Specification". www.ecma-international.org. Retrieved 4 August 2020.
외부 링크
- [ Regular Express Flavor Comparison ]: 가장 일반적인 정규 표현 플레이버의 상세 비교
- Regexp 구문 요약
- 온라인 정규 표현 테스트 - Java, JavaScript, .Net, PHP, Python 및 Ruby 지원
- 정규 표현 구현 - RE2의 저자인 Russ Cox의 일련의 기사
- 정규 표현 엔진