Sintaks RE2

Artikel ini menyediakan gambaran umum sintaks ekspresi reguler yang didukung oleh Bahasa Kueri Kusto (KQL), yang merupakan sintaks pustaka RE2.

Ada sejumlah operator dan fungsi KQL yang melakukan pencocokan string, pemilihan, dan ekstraksi dengan ekspresi reguler, seperti matches regex, parse, dan replace_regex().

Dalam KQL, ekspresi reguler harus dikodekan sebagai literal string dan mengikuti aturan pengutipan string. Misalnya, regex \A RE2 diwakili dalam KQL sebagai "\\A". Garis miring terbelakang ekstra menunjukkan bahwa garis miring terbelakang lainnya adalah bagian dari ekspresi \Areguler .

Gambaran umum sintaksis

Tabel berikut ini gambaran umum sintaks ekspresi reguler RE2, yang digunakan untuk menulis ekspresi reguler di Kusto.

Elemen Sintaks Deskripsi
Literal tunggal Karakter tunggal cocok dengan dirinya sendiri, kecuali untuk metacharacters (* + ? ( ) |), yang memiliki arti unik seperti yang dijelaskan dalam baris berikut.
Metakarakter Untuk mencocokkan metacharacter secara harfiah, lepaskan dengan garis miring terbalik. Misalnya, ekspresi \+ reguler cocok dengan karakter literal plus (+).
Pergantian Alternatif dua ekspresi dengan untuk membuat ekspresi baru yang cocok dengan | salah satu ekspresi. Misalnya, e1 | e2 cocok dengan e1 atau e2.
Rangkaian Menggabungkan dua ekspresi untuk membuat ekspresi baru yang cocok dengan ekspresi pertama diikuti dengan ekspresi kedua. Misalnya, e1e2 kecocokan e1 diikuti oleh e2.
Pengulangan Metacharacters ?, +, dan * adalah operator pengulangan. Misalnya, e1? cocok dengan nol atau satu kemunculan e1, e1+ cocok dengan satu atau beberapa kemunculan e1, dan e1* cocok dengan urutan nol atau lebih, mungkin berbeda, string yang cocok e1.

Catatan

Operator ekspresi reguler mengevaluasi dalam urutan ini: pergantian (|), perangkaian (ekspresi berdampingan), dan pengulangan (?, +, *). Gunakan tanda kurung untuk mengontrol urutan evaluasi.

Ekspresi karakter tunggal

Contoh Deskripsi
. karakter apa pun, mungkin termasuk garis baru (s =true)
[xyz] kelas karakter
[^xyz] kelas karakter yang ditiadakan
\d kelas karakter Perl
\D kelas karakter Perl yang ditiadakan
[[:alpha:]] kelas karakter ASCII
[[:^alpha:]] kelas karakter ASCII yang ditiadakan
\pN kelas karakter Unicode (nama satu huruf)
\p{Greek} kelas karakter Unicode
\PN kelas karakter Unicode yang ditiadakan (nama satu huruf)
\P{Greek} kelas karakter Unicode yang ditiadakan

Komposit

Contoh Deskripsi
xy x diikuti oleh y
x\|y x atau y (lebih memilih x)

Repetisi

Contoh Deskripsi
x* nol atau lebih x, lebih banyak lebih baik
x+ satu atau lebih x, lebih banyak lebih baik
x? zero atau satu x, satu lebih baik
x{n,m} n atau n+1 atau ... atau mx, lebih banyak lebih baik
x{n,} n atau lebih x, lebih banyak lebih baik
x{n} tepatnya nx
x*? nol atau lebih x, lebih sedikit lebih baik
x+? satu atau lebih x, lebih sedikit lebih baik
x?? no atau sat x, nol lebih baik
x{n,m}? n atau n+1 atau ... atau mx, lebih sedikit lebih baik
x{n,}? n atau lebih x, lebih sedikit lebih baik
x{n}? tepatnya nx
x{} (≡ x*) (TIDAK DIDUKUNG) VIM
x{-} (≡ x*?) (TIDAK DIDUKUNG) VIM
x{-n} (≡ x{n}?) (TIDAK DIDUKUNG) VIM
x= (≡ x?) (TIDAK DIDUKUNG) VIM

Pembatasan implementasi: Bentuk penghitungan x{n,m}, x{n,}, dan x{n} menolak bentuk yang membuat jumlah repetisi minimum atau maksimum di atas 1.000. Pengulangan tidak terbatas tidak tunduk pada pembatasan ini.

Repetisi posesif

Contoh Deskripsi
x*+ nol atau lebih x, posesif (TIDAK DIDUKUNG)
x++ satu atau lebih x, posesif (TIDAK DIDUKUNG)
x?+ nol atau satu x, posesif (TIDAK DIDUKUNG)
x{n,m}+ n atau ... atau mx, posesif (TIDAK DIDUKUNG)
x{n,}+ n atau lebih x, posesif (TIDAK DIDUKUNG)
x{n}+ tepatnya nx, posesif (TIDAK DIDUKUNG)

Pengelompokan

Contoh Deskripsi
(re) grup pengambilan bernomor (submatch)
(?P<name>re) bernama & grup penangkap bernomor (submatch)
(?<name>re) bernama & grup penangkap bernomor (submatch) (TIDAK DIDUKUNG)
(?'name're) bernama & grup penangkap bernomor (submatch) (TIDAK DIDUKUNG)
(?:re) grup non-penangkap
(?flags) mengatur bendera dalam grup saat ini; tidak menangkap
(?flags:re) mengatur bendera selama re; tidak menangkap
(?#text) komentar (TIDAK DIDUKUNG)
(?\|x\|y\|z) pengaturan ulang penomoran cabang (TIDAK DIDUKUNG)
(?>re) pencocokan re pasif (TIDAK DIDUKUNG)
re@> pencocokan re pasif (TIDAK DIDUKUNG) VIM
%(re) VIM grup non-penangkap (TIDAK DIDUKUNG)

Bendera

Contoh Deskripsi
i tidak peka terhadap huruf besar/kecil (false default)
m mode multi-line: ^ dan $ dan cocokkan garis mulai/akhir selain teks awal/akhir (false default)
s biarkan . cocok \n (false default)
U ungreedy: menukar makna x* dan x*?, x+ dan x+? dll (default false)

Sintaksis bendera adalah xyz (set) atau -xyz (clear) atau xy-z (set xy, clear z).

Untuk menggunakan bendera, Anda harus menentukan kind parameter dan flags , sebagai berikut: kind=regexflags=regexFlags.

String kosong

Contoh Deskripsi
^ di awal teks atau baris (m=true)
$ di akhir teks (seperti \z not\Z) atau baris (m=true)
\A di awal teks
\b pada batas kata ASCII (\w di satu sisi dan \W, \A, atau \z di sisi lain)
\B Tidak pada batas kata ASCII
\g di awal subteks yang sedang dicari (TIDAK DIDUKUNG) PCRE
\G di akhir pencocokan terakhir (TIDAK DIDUKUNG) PERL
\Z di akhir teks, atau sebelum garis baru di akhir teks (TIDAK DIDUKUNG)
\z di akhir teks
(?=re) sebelum teks cocok re (TIDAK DIDUKUNG)
(?!re) sebelum teks tidak cocok re (TIDAK DIDUKUNG)
(?<=re) setelah teks cocok re (TIDAK DIDUKUNG)
(?<!re) setelah teks tidak cocok re (TIDAK DIDUKUNG)
re& sebelum teks cocok re (TIDAK DIDUKUNG) VIM
re@= sebelum teks cocok re (TIDAK DIDUKUNG) VIM
re@! sebelum teks tidak cocok re (TIDAK DIDUKUNG) VIM
re@<= setelah teks cocok re (TIDAK DIDUKUNG) VIM
re@<! setelah teks tidak cocok re (TIDAK DIDUKUNG) VIM
\zs set mulai pencocokan (= \K) (TIDAK DIDUKUNG) VIM
\ze set akhir pencocokan (TIDAK DIDUKUNG) VIM
\%^ awal file (TIDAK DIDUKUNG) VIM
\%$ akhir file (TIDAK DIDUKUNG) VIM
\%V di layar (TIDAK DIDUKUNG) VIM
\%# posisi kursor (TIDAK DIDUKUNG) VIM
\%'m tandai m posisi (NOT SUPPORTED) VIM
\%23l di baris 23 (TIDAK DIDUKUNG) VIM
\%23c di kolom 23 (TIDAK DIDUKUNG) VIM
\%23v di kolom virtual 23 (TIDAK DIDUKUNG) VIM

Urutan escape

Contoh Deskripsi
\a bell (≡ \007)
\f umpan formulir (≡ \014)
\t tab horizontal (≡ \011)
\n garis baru (≡ \012)
\r kembali ke awal (≡ \015)
\v karakter tab vertikal (≡ \013)
\* literal *, untuk karakter tanda baca apa pun *
\123 kode karakter oktal (hingga tiga digit)
\x7F kode karakter hex (tepatnya dua digit)
\x{10FFFF} kode karakter hex
\C cocokkan satu byte bahkan dalam mode UTF-8
\Q...\E teks literal ... bahkan jika ... memiliki tanda baca
\1 backreference (TIDAK DIDUKUNG)
\b backspace (TIDAK DIDUKUNG) (gunakan \010)
\cK control char ^K (TIDAK DIDUKUNG) (gunakan \001 dll)
\e escape (TIDAK DIDUKUNG) (gunakan \033)
\g1 backreference (TIDAK DIDUKUNG)
\g{1} backreference (TIDAK DIDUKUNG)
\g{+1} backreference (TIDAK DIDUKUNG)
\g{-1} backreference (TIDAK DIDUKUNG)
\g{name} backreference bernama (TIDAK DIDUKUNG)
\g<name> panggilan subrutin (TIDAK DIDUKUNG)
\g'name' panggilan subrutin (TIDAK DIDUKUNG)
\k<name> backreference bernama (TIDAK DIDUKUNG)
\k'name' backreference bernama (TIDAK DIDUKUNG)
\lX huruf kecil X (TIDAK DIDUKUNG)
\ux huruf besar x (TIDAK DIDUKUNG)
\L...\E teks huruf kecil ... (TIDAK DIDUKUNG)
\K reset awal $0 (TIDAK DIDUKUNG)
\N{name} karakter Unicode bernama (TIDAK DIDUKUNG)
\R hentian garis (TIDAK DIDUKUNG)
\U...\E teks huruf besar ... (TIDAK DIDUKUNG)
\X urutan Unicode diperluas (TIDAK DIDUKUNG)
\%d123 karakter desimal 123 (TIDAK DIDUKUNG) VIM
\%xFF karakter hex FF (TIDAK DIDUKUNG) VIM
\%o123 karakter oktal 123 (TIDAK DIDUKUNG) VIM
\%u1234 0x1234 karakter Unicode (TIDAK DIDUKUNG) VIM
\%U12345678 0x12345678 karakter Unicode (TIDAK DIDUKUNG) VIM

Elemen kelas karakter

Contoh Deskripsi
x karakter tunggal
A-Z rentang karakter (inklusif)
\d Kelas karakter Perl
[:foo:] Kelas karakter ASCII foo
\p{Foo} Kelas karakter Unicode Foo
\pF Kelas karakter Unicode F (nama satu huruf)

Menamai kelas karakter sebagai elemen kelas karakter

Contoh Deskripsi
[\d] digit (≡ \d)
[^\d] bukan digit (≡ \D)
[\D] bukan digit (≡ \D)
[^\D] bukan bukan digit (≡ \d)
[[:name:]] menamai kelas ASCII di dalam kelas karakter (≡ [:name:])
[^[:name:]] menamai kelas ASCII di dalam kelas karakter yang ditiadakan (≡ [:^name:])
[\p{Name}] menamai properti Unicode di dalam kelas karakter (≡ \p{Name})
[^\p{Name}] menamai properti Unicode di dalam kelas karakter yang ditiadakan (≡ \P{Name})

Kelas karakter Perl

Khusus ASCII

Contoh Deskripsi
\d digit (≡ [0-9])
\D bukan digit (≡ [^0-9])
\s spasi kosong (≡ [\t\n\f\r ])
\S bukan spasi kosong (≡ [^\t\n\f\r ])
\w karakter kata (≡ [0-9A-Za-z_])
\W bukan karakter kata (≡ [^0-9A-Za-z_])
\h ruang horizontal (TIDAK DIDUKUNG)
\H bukan spasi horizontal (TIDAK DIDUKUNG)
\v ruang vertikal (TIDAK DIDUKUNG)
\V bukan ruang vertikal (TIDAK DIDUKUNG)

Kelas karakter ASCII

Contoh Deskripsi
[[:alnum:]] alfanumerik (≡ [0-9A-Za-z])
[[:alpha:]] alfabetik (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] kosong (≡ [\t ])
[[:cntrl:]] kontrol (≡ [\x00-\x1F\x7F])
[[:digit:]] digit (≡ [0-9])
[[:graph:]] grafis (≡ [!-~][A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_{ |}~])
[[:lower:]] huruf kecil (≡ [a-z])
[[:print:]] dapat dicetak (≡ [ -~][ [:graph:]])
[[:punct:]] tanda baca (≡ [!-/:-@[-{-~])
[[:space:]] spasi kosong (≡ [\t\n\v\f\r ])
[[:upper:]] huruf besar (≡ [A-Z])
[[:word:]] karakter kata (≡ [0-9A-Za-z_])
[[:xdigit:]] digit hex (≡ [0-9A-Fa-f])

Nama kelas karakter Unicode

Umum

Contoh Deskripsi
C lainnya
Cc Kontrol
Cf format
Cn titik kode yang tidak ditetapkan (TIDAK DIDUKUNG)
Co penggunaan pribadi
Cs pengganti
L huruf
LC penggunaan huruf besar/kecil (TIDAK DIDUKUNG)
L& penggunaan huruf besar/kecil (TIDAK DIDUKUNG)
Ll huruf kecil
Lm huruf pengubah
Lo huruf lainnya
Lt huruf kapital untuk judul
Lu huruf besar
M tanda
Mc tanda penspasian
Me tanda penutup
Mn tanda nonspacing
N number
Nd angka desimal
Nl angka huruf
No angka lainnya
P tanda baca
Pc tanda baca penghubung
Pd tanda baca dash
Pe tanda baca penutup
Pf tanda baca akhir
Pi tanda baca awal
Po tanda baca lainnya
Ps tanda baca terbuka
S simbol
Sc simbol mata uang
Sk simbol pengubah
Sm simbol matematika
So simbol lainnya
Z pemisah
Zl pemisah garis
Zp pemisah paragraf
Zs pemisah ruang

Skrip

Skrip
Adlam
Ahom
Anatolian_Hieroglyphs
Arabic
Armenian
Avestan
Balinese
Bamum
Bassa_Vah
Batak
Bengali
Bhaiksuki
Bopomofo
Brahmi
Braille
Buginese
Buhid
Canadian_Aboriginal
Carian
Caucasian_Albanian
Chakma
Cham
Cherokee
Chorasmian
Common
Coptic
Cuneiform
Cypriot
Cyrillic
Deseret
Devanagari
Dives_Akuru
Dogra
Duployan
Egyptian_Hieroglyphs
Elbasan
Elymaic
Ethiopic
Georgian
Glagolitic
Gothic
Grantha
Greek
Gujarati
Gunjala_Gondi
Gurmukhi
Han
Hangul
Hanifi_Rohingya
Hanunoo
Hatran
Hebrew
Hiragana
Imperial_Aramaic
Inherited
Inscriptional_Pahlavi
Inscriptional_Parthian
Javanese
Kaithi
Kannada
Katakana
Kayah_Li
Kharoshthi
Khitan_Small_Script
Khmer
Khojki
Khudawadi
Lao
Latin
Lepcha
Limbu
Linear_A
Linear_B
Lisu
Lycian
Lydian
Mahajani
Makasar
Malayalam
Mandaic
Manichaean
Marchen
Masaram_Gondi
Medefaidrin
Meetei_Mayek
Mende_Kikakui
Meroitic_Cursive
Meroitic_Hieroglyphs
Miao
Modi
Mongolian
Mro
Multani
Myanmar
Nabataean
Nandinagari
New_Tai_Lue
Newa
Nko
Nushu
Nyiakeng_Puachue_Hmong
Ogham
Ol_Chiki
Old_Hungarian
Old_Italic
Old_North_Arabian
Old_Permic
Old_Persian
Old_Sogdian
Old_South_Arabian
Old_Turkic
Odia
Osage
Osmanya
Pahawh_Hmong
Palmyrene
Pau_Cin_Hau
Phags_Pa
Phoenician
Psalter_Pahlavi
Rejang
Runic
Samaritan
Saurashtra
Sharada
Shavian
Siddham
SignWriting
Sinhala
Sogdian
Sora_Sompeng
Soyombo
Sundanese
Syloti_Nagri
Syriac
Tagalog
Tagbanwa
Tai_Le
Tai_Tham
Tai_Viet
Takri
Tamil
Tangut
Telugu
Thaana
Thai
Tibetan
Tifinagh
Tirhuta
Ugaritic
Vai
Wancho
Warang_Citi
Yezidi
Yi
Zanabazar_Square

Kelas karakter Vim

Contoh Deskripsi
\i karakter pengidentifikasi (TIDAK DIDUKUNG) VIM
\I \i mengecualikan digit (TIDAK DIDUKUNG) VIM
\k karakter kata kunci (TIDAK DIDUKUNG) VIM
\K \k mengecualikan digit (TIDAK DIDUKUNG) VIM
\f karakter nama file (TIDAK DIDUKUNG) VIM
\F \f mengecualikan digit (TIDAK DIDUKUNG) VIM
\p karakter yang dapat dicetak (TIDAK DIDUKUNG) VIM
\P \p mengecualikan digit (TIDAK DIDUKUNG) VIM
\s karakter spasi kosong (≡ [ \t]) (TIDAK DIDUKUNG) VIM
\S karakter spasi nonwhite (≡ [^ \t]) (TIDAK DIDUKUNG) VIM
\d digit (≡ [0-9]) VIM
\D bukan \d VIM
\x digit hex (≡ [0-9A-Fa-f]) (TIDAK DIDUKUNG) VIM
\X bukan (≡ \x) (TIDAK DIDUKUNG) VIM
\o digit oktal (≡ [0-7]) (TIDAK DIDUKUNG) VIM
\O bukan (≡ \o) (TIDAK DIDUKUNG) VIM
\w karakter kata VIM
\W bukan \w VIM
\h kepala karakter kata (TIDAK DIDUKUNG) VIM
\H bukan \h (TIDAK DIDUKUNG) VIM
\a alfabetik (TIDAK DIDUKUNG) VIM
\A bukan \a (TIDAK DIDUKUNG) VIM
\l huruf kecil (TIDAK DIDUKUNG) VIM
\L bukan huruf kecil (TIDAK DIDUKUNG) VIM
\u huruf besar (TIDAK DIDUKUNG) VIM
\U bukan huruf besar (TIDAK DIDUKUNG) VIM
\_x \x plus garis baru, untuk setiap x (TIDAK DIDUKUNG) VIM
\c abaikan huruf besar/kecil (TIDAK DIDUKUNG) VIM
\C cocokkan huruf besar/kecil (TIDAK DIDUKUNG) VIM
\m magic (TIDAK DIDUKUNG) VIM
\M nomagic (TIDAK DIDUKUNG) VIM
\v verymagic (TIDAK DIDUKUNG) VIM
\V verynomagic (TIDAK DIDUKUNG) VIM
\Z mengabaikan perbedaan dalam karakter penggabungan Unicode (TIDAK DIDUKUNG) VIM

Magic

Contoh Deskripsi
(?{code}) kode Perl arbitrer (TIDAK DIDUKUNG) PERL
(??{code}) kode Perl arbitrer yang ditunda (TIDAK DIDUKUNG) PERL
(?n) panggilan rekursif ke grup pengambilan regexp n (TIDAK DIDUKUNG)
(?+n) panggilan rekursif ke grup relatif +n (TIDAK DIDUKUNG)
(?-n) panggilan rekursif ke grup relatif -n (TIDAK DIDUKUNG)
(?C) Panggilan PCRE (TIDAK DIDUKUNG) PCRE
(?R) panggilan rekursif ke seluruh regexp (?0) (TIDAK DIDUKUNG)
(?&name) panggilan rekursif ke grup bernama (TIDAK DIDUKUNG)
(?P=name) backreference bernama (TIDAK DIDUKUNG)
(?P>name) panggilan rekursif ke grup bernama (TIDAK DIDUKUNG)
(?(cond)true\|false) cabang bersyarat (TIDAK DIDUKUNG)
(?(cond)true) cabang bersyarat (TIDAK DIDUKUNG)
(*ACCEPT) menjadikan regexps lebih seperti Prolog (TIDAK DIDUKUNG)
(*COMMIT) TIDAK DIDUKUNG *
(*F) TIDAK DIDUKUNG *
(*FAIL) TIDAK DIDUKUNG *
(*MARK) TIDAK DIDUKUNG *
(*PRUNE) TIDAK DIDUKUNG *
(*SKIP) TIDAK DIDUKUNG *
(*THEN) TIDAK DIDUKUNG *
(*ANY) menetapkan konvensi garis baru (TIDAK DIDUKUNG)
(*ANYCRLF) TIDAK DIDUKUNG *
(*CR) TIDAK DIDUKUNG *
(*CRLF) TIDAK DIDUKUNG *
(*LF) TIDAK DIDUKUNG *
(*BSR_ANYCRLF) menetapkan konvensi \R (TIDAK DIDUKUNG) PCRE
(*BSR_UNICODE) (TIDAK DIDUKUNG) PCRE