정규식 구문
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
이 문서에서는 KQL(Kusto 쿼리 언어)에서 지원하는 정규식 구문의 개요를 제공합니다.
정규식을 사용하여 문자열 일치, 선택 및 추출을 수행하는 여러 KQL 연산자 및 함수(예: matches regex
, parse
및 replace_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] |
대칭 차이(일치 a 및 h 전용) |
[\[\]] |
문자 클래스의 이스케이프(일치 [ 또는 ]) |
[a&&b] |
아무것도 일치하는 빈 문자 클래스 |
참고 항목
명명된 문자 클래스는 대괄호로 묶인 [...]
문자 클래스 내에 나타날 수 있습니다. 예를 들어 스크립트의 [\p{Greek}[:digit:]]
ASCII 숫자 또는 코드포인트와 일치합니다 Greek
. [\p{Greek}&&\pL]
는 그리스어 문자와 일치합니다.
문자 클래스의 우선 순위는 대부분의 바인딩에서 최소 바인딩까지입니다.
- 범위:
[a-cd]
==[[a-c]d]
- 합집합:
[ab&&bc]
==[[ab]&&[bc]]
- 교집합, 차이, 대칭 차이: 모두 동일한 우선 순위를 가지며 왼쪽에서 오른쪽으로 평가됩니다. 예들 들어
[\pL--\p{Greek}&&\p{Uppercase}]
==[[\pL--\p{Greek}]&&\p{Uppercase}]
입니다. - 부정:
[^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+
역방향 일치가 수행됩니다.