다음을 통해 공유


정규식 구문

적용 대상: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

이 문서에서는 KQL(Kusto 쿼리 언어)에서 지원하는 정규식 구문의 개요를 제공합니다.

정규식을 사용하여 문자열 일치, 선택 및 추출을 수행하는 여러 KQL 연산자 및 함수(예: matches regex, parsereplace_regex())가 있습니다.

KQL에서 정규식은 문자열 리터럴인코딩되고 문자열 따옴표 규칙을 따라야 합니다. 예를 들어 정규식 \A 은 KQL "\\A"로 표시됩니다. 추가 백슬래시는 다른 백슬래시는 정규식 \A의 일부임을 나타냅니다.

구문

다음 섹션에서는 Kusto에서 지원하는 정규식 구문을 설명합니다.

한 문자 일치

패턴 설명
. 새 줄을 제외한 모든 문자(s 플래그가 있는 새 줄 포함)
[0-9] 모든 ASCII 숫자
\d Digit(\p{Nd})
\D 숫자가 아님
\pX 한 글자 이름으로 식별되는 유니코드 문자 클래스
\p{Greek} 유니코드 문자 클래스(일반 범주 또는 스크립트)
\PX 한 글자 이름으로 식별되는 부정 유니코드 문자 클래스
\P{Greek} 부정 유니코드 문자 클래스(일반 범주 또는 스크립트)

문자 클래스

패턴 설명
[xyz] x, y 또는 z(union)와 일치하는 문자 클래스입니다.
[^xyz] x, y 및 z를 제외한 모든 문자와 일치하는 문자 클래스입니다.
[a-z] 범위 a-z의 모든 문자와 일치하는 문자 클래스입니다.
[[:alpha:]] ASCII 문자 클래스([A-Za-z])
[[:^alpha:]] 부정 ASCII 문자 클래스([^A-Za-z])
[x[^xyz]] 중첩/그룹화 문자 클래스(y 및 z를 제외한 모든 문자 일치)
[a-y&&xyz] 교집합(x 또는 y 일치)
[0-9&&[^4]] 교집합 및 부정을 사용한 빼기(0-9 일치( 4 제외)
[0-9--4] 직접 빼기(4를 제외한 0-9 일치)
[a-g~~b-h] 대칭 차이(일치 ah 전용)
[\[\]] 문자 클래스의 이스케이프(일치 [ 또는 ])
[a&&b] 아무것도 일치하는 빈 문자 클래스

참고 항목

명명된 문자 클래스는 대괄호로 묶인 [...] 문자 클래스 내에 나타날 수 있습니다. 예를 들어 스크립트의 [\p{Greek}[:digit:]] ASCII 숫자 또는 코드포인트와 일치합니다 Greek . [\p{Greek}&&\pL] 는 그리스어 문자와 일치합니다.

문자 클래스의 우선 순위는 대부분의 바인딩에서 최소 바인딩까지입니다.

  1. 범위: [a-cd] == [[a-c]d]
  2. 합집합: [ab&&bc] == [[ab]&&[bc]]
  3. 교집합, 차이, 대칭 차이: 모두 동일한 우선 순위를 가지며 왼쪽에서 오른쪽으로 평가됩니다. 예들 들어 [\pL--\p{Greek}&&\p{Uppercase}] == [[\pL--\p{Greek}]&&\p{Uppercase}]입니다.
  4. 부정: [^a-z&&b] == [^[a-z&&b]].

Composites

패턴 설명
xy 연결(x 뒤에)이 잇습니다 y.
x\|y 번갈아(x 또는 y 선호 x)

반복

패턴 설명
x* x 0개 이상(욕심)
x+ 하나 이상의 x(욕심)
x? x(greedy) 중 0개 또는 1개
x*? x 0개 이상(ungreedy/lazy)
x+? 하나 이상의 x(ungreedy/lazy)
x?? x(ungreedy/lazy) 중 하나 또는 0개
x{n,m} n x 이상 및 최대 m x(greedy)
x{n,} N x 이상(greedy)
x{n} 정확히 n x
x{n,m}? n x 이상 및 최대 m x(ungreedy/lazy)
x{n,}? n개 이상(ungreedy/lazy)
x{n}? 정확히 n x

빈 일치 항목

패턴 설명
^ 건초 스택의 시작(또는 여러 줄 모드의 줄 시작)
$ 건초 스택의 끝(또는 여러 줄 모드의 줄 끝)
\A 건초 스택의 시작 부분만(여러 줄 모드를 사용하도록 설정된 경우에도)
\z 건초 스택의 끝만(여러 줄 모드를 사용하도록 설정된 경우에도)
\b 유니코드 단어 경계(\w 한쪽 및 \W, \A또는 \z 다른 쪽)
\B 유니코드 단어 경계 아님
\b{start}, \< 유니코드 단어 시작 경계(\W\|\A 왼쪽, \w 오른쪽)
\b{end}, \> 유니코드 단어 끝 경계(\w 왼쪽, \W\|\z 오른쪽)
\b{start-half} 유니코드 단어 시작 경계의 절반(\W\|\A 왼쪽)
\b{end-half} 유니코드 단어 끝 경계의 절반(\W\|\z 오른쪽)

그룹화 및 플래그

패턴 설명
(exp) 번호가 매겨진 캡처 그룹(괄호를 열어 인덱싱됨)
(?P<name>exp) 명명된(번호가 매겨진) 캡처 그룹(이름은 알파 숫자여야 합니다.)
(?<name>exp) 명명된(번호가 매겨진) 캡처 그룹(이름은 알파 숫자여야 합니다.)
(?:exp) 비 캡처링 그룹
(?flags) 현재 그룹 내에서 플래그 설정
(?flags:exp) exp에 대한 플래그 설정(비 캡처)

캡처 그룹 이름에는 알파 숫자 유니코드 코드포인트, 점, 밑줄 .및 대괄호 및 ]대괄호만 포함될 수 있습니다[._ 이름은 사전순 코드포인트 또는 영문자 코드포인트로 _ 시작해야 합니다. 알파벳 코드포인트는 유니코드 속성에 Alphabetic 해당하지만 숫자 코드포인트는 및 Letter_Number Other_Number 일반 범주의 합합에 Decimal_Number해당합니다.

플래그는 단일 문자입니다. 예를 들어 (?x) 플래그를 설정하고 플래그 x (?-x) x를 지웁니다. 여러 플래그를 동시에 (?xy) 설정하거나 지울 수 있습니다. 플래그와 y (?x-y) 플래그를 x 모두 설정하고 플래그를 x 설정하고 플래그를 y 지웁니다. 달리 명시되지 않는 한 기본적으로 모든 플래그는 사용하지 않도록 설정됩니다. 화면은 다음과 같습니다.

Flag 설명
i 대/소문자를 구분하지 않습니다. 문자가 대문자와 소문자를 모두 일치
m 여러 줄 모드: ^$ 줄의 시작/끝 일치
s 점(.)을 허용합니다. 일치하려면 \n
R CRLF 모드 사용: 여러 줄 모드를 사용하는 \r\n 경우 사용
U 의 의미 x* 바꾸기 x*?
u 유니코드 지원(기본적으로 사용)
x 자세한 정보 표시 모드, 공백 무시 및 줄 주석 허용(시작#)

자세한 정보 표시 모드에서는 문자 클래스를 포함하여 모든 위치에서 공백이 무시됩니다. 공백을 삽입하려면 이스케이프된 폼 또는 16진수 리터럴을 사용합니다. 예를 들어 ASCII \ 공간의 \x20 경우입니다.

참고 항목

  • 패턴 내에서 플래그를 전환할 수 있습니다. 예를 들어 다음 구문은 첫 번째 부분에 대/소문자를 구분하지 않는 일치를 사용하고 두 번째 부분에 (?i)a+(?-i)b+는 대/소문자를 구분하는 일치를 사용합니다.
  • a+a 은 일치하거나 A일치하지만 유일한 일치 항목은 b+ 일치b합니다.
  • 여러 줄 모드는 입력의 시작 또는 끝뿐만 아니라 줄의 시작 또는 끝에서도 더 이상 일치하지 않음을 의미 ^ $ 합니다. ^ 입력이 끝날 때도 새 줄 뒤와 일치합니다.
  • CRLF 모드와 여러 줄 모드를 모두 사용하도록 설정한 경우 ^ 중 하나 \r$ \n일치하지만 중간에는 일치하지 않습니다\r\n.
  • 결과가 잘못된 UTF-8과 일치하지 않는 경우에만 유니코드 모드를 선택적으로 사용하지 않도록 설정할 수 있습니다. 예를 들어 유니코드 단어 경계 대신 ASCII 단어 경계를 사용하면 일치하는 일부 정규식 검색이 더 빠르게 (?-u:\b).+(?-u:\b) 실행될 $$abc$$수 있습니다.

이스케이프 시퀀스

패턴 설명
\* 리터럴 *은 다음을 제외한 모든 ASCII에 적용됩니다. [0-9A-Za-z<>]
\a 벨(\x07)
\f 양식 피드(\x0C)
\t 가로 탭
\n 줄 바꿈
\r 캐리지 리턴
\v 세로 탭(\x0B)
\A 건초 더미의 시작 부분에서 일치
\z 건초 더미의 끝에서 일치
\b Word 경계 어설션
\B 부정 단어 경계 어설션
\b{start}, \< 단어 시작 경계 어설션
\b{end}, \> 단어 끝 경계 어설션
\b{start-half} 단어 시작 경계 어설션의 절반
\b{end-half} 단어 끝 경계 어설션의 절반
\123 8진수 코드( 최대 3자리 숫자)
\x7F 16진수 문자 코드(정확히 두 자리 수)
\x{10FFFF} 유니코드 코드 포인트에 해당하는 16진수 문자 코드
\u007F 16진수 문자 코드(정확히 4자리 숫자)
\u{7F} 유니코드 코드 포인트에 해당하는 16진수 문자 코드
\U0000007F 16진수 문자 코드(정확히 8자리 숫자)
\U{7F} 유니코드 코드 포인트에 해당하는 16진수 문자 코드
\p{Letter} 유니코드 문자 클래스
\P{Letter} 부정 유니코드 문자 클래스
\d, , \s\w Perl 문자 클래스
\D, , \S\W 부정된 Perl 문자 클래스

Perl 문자 클래스(유니코드 친화적)

이러한 클래스는 UTS#18제공된 정의를 기반으로 합니다.

패턴 설명
\d Ddigit(\p{Nd})
\D 숫자가 아님
\s 공백(\p{White_Space})
\S 공백이 아님
\w Word 문자(\p{Alphabetic}\p{Join_Control} + + + \p{Pc} + \p{M}\d)
\W 단어 문자 아님

ASCII 문자 클래스

이러한 클래스는 UTS#18제공된 정의를 기반으로 합니다.

패턴 설명
[[:alnum:]] 영숫자([0-9A-Za-z])
[[:alpha:]] 사전순([A-Za-z])
[[:ascii:]] ASCII([\x00-\x7F])
[[:blank:]] 비어 있음([\t ])
[[:cntrl:]] 컨트롤([\x00-\x1F\x7F])
[[:digit:]] 숫자([0-9])
[[:graph:]] 그래픽([!-~])
[[:lower:]] 소문자([a-z])
[[:print:]] 인쇄 가능([ -~])
[[:punct:]] 문장 부호([!-/:-@\[-`{-~])
[[:space:]] 공백([\t\n\v\f\r ])
[[:upper:]] 대문자([A-Z])
[[:word:]] Word 문자([0-9A-Za-z_])
[[:xdigit:]] 16진수([0-9A-Fa-f])

성능

이 섹션에서는 regex 식의 속도 및 리소스 사용에 대한 몇 가지 지침을 제공합니다.

유니코드는 메모리 사용량 및 검색 속도에 영향을 미칠 수 있습니다.

KQL regex는 유니코드에 대한 첫 번째 클래스 지원을 제공합니다. 대부분의 경우 유니코드를 지원하는 데 필요한 추가 메모리는 무시할 수 있으며 일반적으로 검색 속도에 영향을 주지 않습니다.

다음은 메모리 사용량 및 검색 속도에 영향을 줄 수 있는 유니코드 문자 클래스의 몇 가지 예입니다.

  • 메모리 사용: 유니코드의 영향은 주로 유니코드 문자 클래스의 사용에서 발생합니다. 유니코드 문자 클래스의 크기는 더 큰 경향이 있습니다. 예를 들어 문자 클래스는 \w 기본적으로 약 140,000개의 고유 코드포인트와 일치합니다. 이렇게 하려면 추가 메모리가 필요하며 정규식 컴파일 속도가 느려질 수 있습니다. ASCII에서 요구 사항을 충족할 수 있는 경우 유니코드 클래스 대신 ASCII 클래스를 사용하는 것이 좋습니다. ASCII 전용 버전은 \w 여러 가지 방법으로 표현할 수 있으며 모두 동일합니다.

    [0-9A-Za-z_]
    (?-u:\w)
    [[:word:]]
    [\w&&\p{ascii}]
    
  • 검색 속도: 유니코드는 큰 유니코드 문자 클래스를 사용하는 경우에도 꽤 잘 처리되는 경향이 있습니다. 그러나 더 빠른 내부 정규식 엔진 중 일부는 유니코드 인식 단어 경계 어설션을 처리할 수 없습니다. 따라서 유니코드 인식 단어 경계 어설션이 필요하지 않은 경우 대신 사용하는 (?-u:\b) \b것이 좋습니다. 단어 (?-u:\b) 문자의 ASCII 전용 정의를 사용하여 검색 속도를 향상시킬 수 있습니다.

리터럴은 검색을 가속화할 수 있습니다.

KQL regex에는 regex 패턴 내에서 리터럴을 인식하는 강력한 기능이 있어 검색 속도를 크게 높일 수 있습니다. 가능하면 패턴에 리터럴을 포함하면 검색 성능이 크게 향상될 수 있습니다. 예를 들어 regex \w+@\w+에서 첫 번째 항목 @ 이 일치한 다음, 시작 위치를 찾기 위해 \w+ 역방향 일치가 수행됩니다.