정규 표현 엔진 비교

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,

Qt GNU LGPL 버전 2.1, Qt Commercial

케이트, 킬레
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
울프람어(수학) 울프람 언어 문서 센터 울프람어 매스매티카, 울프람 개발 플랫폼
  1. ^ 이전에는 Regex++로 불렸습니다.
  2. ^ a b 퍼지 정규 표현 엔진 중 하나.
  3. ^ 버전 2.13.0 이후에 포함되어 있습니다.
  4. ^ Java 버전인 ICU4J는 정규 표현을 지원하지 않습니다.
  5. ^ C++ 바인딩은 Google에 의해 개발되어 2006년에 PCRE의 정식 일부가 되었습니다.

언어들

정규 표현 지원을 포함한 언어 및 프레임워크 목록
언어 공식 웹사이트 소프트웨어 라이선스 언급
액션 스크립트 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년 현재 표준 모듈은 일반적으로 [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 BREERE 구문 지원
파이썬 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 각 실장별로 라이선스가 부여
  1. ^ "STD.regex - D Programming Language - Digital Mars".
  2. ^ "Dotnet/Corefx". GitHub. 16 February 2022.
  3. ^ "Dotnet/Corefx". GitHub. 16 February 2022.

언어 기능

메모: 정규 표현을 지원하기 위해 라이브러리를 사용하는 응용 프로그램은 라이브러리의 모든 기능을 반드시 제공하는 것은 아닙니다.예를 들어 PCRE를 사용하는 GNU grep은 PCRE를 사용하는 GNU grep은 룩어헤드 지원을 제공하지 않습니다.

파트 1

언어 기능 비교 (파트 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 네. 네. 네. 네. 아니요. 네. 아니요. 네. 네.
  1. ^ 기본값이 아닌 가능한 한 적은 수의 문자만 일치시킵니다.오래된 POSIX 이전 엔진의 상당수는 욕심이 없고 탐욕스러운 수량화도 전혀 없었습니다.
  2. ^ 비캡처 그룹이라고도 하는 샤이 그룹은 백레퍼런스와 함께 참조할 수 없습니다.비캡처 그룹은 나중에 그룹의 컨텐츠에 액세스할 필요가 없는 경우 일치 속도를 높이기 위해 사용됩니다.
  3. ^ 백레퍼런스를 사용하면 regex 및/또는 치환 문자열(해당하는 경우)의 후반부에서 이전에 일치한 그룹을 참조할 수 있습니다.예를 들어 ([ab]+)\1은 "abab"과 일치하지만 "abaab"은 일치하지 않습니다.
  4. ^ "Perl Regular Expression Syntax - 1.47.0".
  5. ^ "User's Guide - 1.47.0".
  6. ^ a b FREJ에는 반복 수량자가 없지만 단순한 "?" 수량자와 유사한 "옵션" 요소가 있습니다.
  7. ^ ES2018 기준
  8. ^ Lua의 유일한 욕심 없는 수식어는-의 비호환 버전입니다.*이 버전에는, 의 비욕적인 버전은 없습니다.+또는?전자의 경우 토큰 뒤에 이어지는 반복을 통해 비점수 효과를 얻을 수 있습니다.-단, 후자의 경우 동등한 것은 없습니다.
  9. ^ 옵션 regex 라이브러리에서만 지원됩니다.

파트 2

언어 기능 비교 (파트 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 선행만 아니요. 아니요. 네. 네. 아니요. 네. 아니요. 아니요.
  1. ^ 플래그 수식자, 모드 수식자 또는 옵션 문자라고도 합니다.패턴의 예: "(?i:test)
  2. ^ 독립 하위 표현식이라고도 합니다.
  3. ^ 백 참조와 비슷하지만 인덱스 대신 이름이 사용됩니다.
  4. ^ 재귀 없이 균형 잡힌 구조를 일치시킬 수 있는 특수 기능입니다.
  5. ^ 후방에서 수량화를 포함할 수 있으므로 그 길이를 예측할 수 없습니다.
  6. ^ a b c d e f g h i Unicode 속성 지원이 불완전할 수 있습니다(제품은 계속 업데이트됩니다!).새로운 Unicode 리비전이 출시되면 준수하도록 업데이트될 때까지 모두 완료되지 않습니다.
  7. ^ ICU55부터 이용 가능.
  8. ^ JDK7부터 이용 가능.
  9. ^ 속성의 지원 및 범위는 구현에 따라 달라집니다.
  10. ^ v5.29.9에서 시험 지원이 추가되었습니다.
  11. ^ a b 옵션 regex 라이브러리에서만 지원됩니다.
  12. ^ 3.3 이후 버전의 Python과 함께 사용할 경우 regex 라이브러리에서만 사용할 수 있습니다.

API 기능

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 네. ? 네. ?
  1. ^ a b 명시적 변환 없이 형식을 내부적으로 사용할 수 있음을 의미합니다.
  2. ^ 정규 표현식 전체의 부분 일치.예를 들어 패턴 " 입니다.*END$"는 모든 문자열과 부분적으로 일치하지만 END로 끝나는 문자열만 완전히 일치합니다.[1].
  3. ^ 2003년부터;JDK7에 최근 계획을 유니 코드 6.0(2011년)지원 등 유니 코드 4.0표준을 지원합니다.[2].
  4. ^ 그래서 64chars 총(16의 1,112,064 캐릭터인 것 같)을 도입, 원래 UCS-2 support/features을 사용한다.마이크로 소프트 developer-representative"것이다를 해결할"는 2010년에 이것을 버그 리포트 대답했다.[3].
  5. ^ 버전 8시 30분부터.
  6. ^ 도구 명령 언어 시설 UTF-8및에서로 개종을 포함합니다.
  7. ^ WxRegEx 어떤 시스템이나 아니면 유니 코드 방식에 헨리 스펜서의 도서관을 사용하여 사용 가능한 POSIX도서관 공급을 사용한다.

「 」를 참조해 주세요.

레퍼런스

외부 링크