RE2 構文

この記事では、RE2 ライブラリの構文である Kusto 照会言語 (KQL) でサポートされる正規表現構文の概要について説明します。

、 などのmatches regexparse正規表現を使用して文字列の一致、選択、抽出を実行する KQL 演算子とreplace_regex()関数は多数あります。

KQL では、正規表現を 文字列リテラル としてエンコードし、文字列の引用符で囲む規則に従う必要があります。 たとえば、RE2 正規表現 \A は KQL で として "\\A"表されます。 余分な円記号は、他の円記号が正規表現 \Aの一部であることを示します。

構文の概要

次の表では、Kusto で正規表現を記述するために使用される RE2 正規表現構文の概要を示します。

Syntax 要素 説明
単一リテラル 1 文字は、メタ文字 (* + ? を除く) と一致します。 ( ) |)。次の行で説明されているように、一意の意味を持ちます。
メタ 文字 メタ文字をリテラルに一致させるには、バックスラッシュでエスケープします。 たとえば、正規表現 \+ はリテラルプラス (+) 文字と一致します。
代替 を使用して 2 つの式を | 代替して、いずれかの式に一致する新しい式を作成します。 たとえば、 e1 | e2 は または e2のいずれかe1と一致します。
連結 2 つの式を連結して、最初の式に続いて 2 番目の式と一致する新しい式を作成します。 たとえば、 e1e2 一致の後に e1 が続 e2きます。
繰り返し メタ文字 ?、、 +および は繰り返し * 演算子です。 たとえば、 e1? は の 0 回または 1 回のe1e1+出現に一致し、 は の 1 回以上のe1出現に一致し、 と一致する 0 個以上の文字列 (異なる可能性がある) のシーケンスとe1*一致e1します。

注意

正規表現演算子は、alternation ()、連結 (|side-by-side 式)、および繰り返し (?、、*+) の順序で評価されます。 評価順序を制御するには、かっこを使用します。

単一の文字式

説明
. 任意の文字 (場合によっては改行を含む) (s=true)
[xyz] 文字クラス
[^xyz] 否定の文字クラス
\d Perl 文字クラス
\D 否定の Perl 文字クラス
[[:alpha:]] ASCII 文字クラス
[[:^alpha:]] 否定の ASCII 文字クラス
\pN Unicode 文字クラス (1 文字の名前)
\p{Greek} Unicode 文字クラス
\PN 否定の Unicode 文字クラス (1 文字の名前)
\P{Greek} 否定の Unicode 文字クラス

合成

説明
xy x、その後で y
x\|y x or y (prefer x)

繰り返し

説明
x* zero or more x, prefer more
x+ one or more x, prefer more
x? zero or one x, prefer one
x{n,m} n or n+1 or ... or mx, prefer more
x{n,} n or more x, prefer more
x{n} exactly nx
x*? zero or more x, prefer fewer
x+? zero or more x, prefer fewer
x?? zero or one x, prefer zero
x{n,m}? n or n+1 or ... or mx, prefer fewer
x{n,}? n or more x, prefer fewer
x{n}? exactly nx
x{} (≡ x*) (サポート対象外) VIM
x{-} (≡ x*?) (サポート対象外) VIM
x{-n} (≡ x{n}?) (サポート対象外) VIM
x= (≡ x?) (サポート対象外) VIM

実装の制限: カウントフォーム x{n,m}、x{n,}、および x{n} は、1000 を超える最小または最大の繰り返し回数を作成するフォームを拒否します。 無制限の繰り返しは、この制限の対象になりません。

所有の繰り返し

説明
x*+ zero or more x, possessive (NOT SUPPORTED)
x++ one or more x, possessive (NOT SUPPORTED)
x?+ zero or one x, possessive (NOT SUPPORTED)
x{n,m}+ n or ... or mx, possessive (NOT SUPPORTED)
x{n,}+ n or more x, possessive (NOT SUPPORTED)
x{n}+ exactly nx, possessive (NOT SUPPORTED)

グループ化

説明
(re) 番号付きキャプチャ グループ (サブマッチ)
(?P<name>re) 名前付き & 番号付きキャプチャ グループ (サブマッチ)
(?<name>re) named & 番号付きキャプチャ グループ (サブマッチ) (サポートされていません)
(?'name're) named & 番号付きキャプチャ グループ (サブマッチ) (サポートされていません)
(?:re) 非キャプチャ グループ
(?flags) 現在のグループ内でフラグを設定する。非キャプチャ
(?flags:re) re の間にフラグを設定します。非キャプチャ
(?#text) コメント (サポート対象外)
(?\|x\|y\|z) ブランチ番号のリセット (サポート対象外)
(?>re) re の所有の一致 (サポート対象外)
re@> re の所有の一致 (サポート対象外) VIM
%(re) 非キャプチャ グループ (サポート対象外) VIM

フラグ

説明
i 大文字と小文字を区別しない (既定の false)
m 複数行モード: ^$ は、開始/終了テキストに加えて開始/終了行に一致(既定は false)
s let . 一致 \n (既定は false)
U ungreedy: x*x*?x+ および x+? の意味を入れ替え (既定は false)

フラグ構文は xyz (set) または -xyz (clear) または xy-z (set xy, clear z) です。

フラグを使用するには、regexflags=regexFlags のように kind= パラメーターと flags パラメーターを指定kindする必要があります。

空の文字列

説明
^ テキストまたは行の先頭 (m=true)
$ テキストの末尾 (\Z ではなく \z など)、または行 (m=true)
\A テキストの先頭
\b ASCII ワード境界 (一方に \w、 もう一方に \W\A\z)
\B ASCII ワード境界ではない
\g 検索されるサブテキストの先頭 (サポート対象外) PCRE
\G 最後の一致の末尾 (サポート対象外) PERL
\Z テキストの末尾、またはテキストの末尾の改行の前 (サポート対象外)
\z テキストの末尾
(?=re) テキスト一致の前 re (サポート対象外)
(?!re) テキスト不一致の前 re (サポート対象外)
(?<=re) テキスト一致の後 re (サポート対象外)
(?<!re) テキスト不一致の後 re (サポート対象外)
re& テキスト一致の前 re (サポート対象外) VIM
re@= テキスト一致の前 re (サポート対象外) VIM
re@! テキスト不一致の前 re (サポート対象外) VIM
re@<= テキスト一致の後 re (サポート対象外) VIM
re@<! テキスト不一致の後 re (サポート対象外) VIM
\zs 一致の開始を設定 (= \K) (サポート対象外) VIM
\ze 一致の終了を設定 (= \K) (サポート対象外) VIM
\%^ ファイルの先頭 (サポート対象外) VIM
\%$ ファイルの末尾 (サポート対象外) VIM
\%V 全画面表示 (サポート対象外) VIM
\%# カーソル位置 (サポート対象外) VIM
\%'m m 位置をマーク (サポート対象外) VIM
\%23l 23 行目 (サポート対象外) VIM
\%23c 23 列目 (サポート対象外) VIM
\%23v 仮想の 23 列目 (サポート対象外) VIM

エスケープ シーケンス

説明
\a ベル (≡ \007)
\f フォーム フィード (≡ \014)
\t 水平タブ (≡ \011)
\n 改行 (≡ \012)
\r 復帰 (≡ \015)
\v 垂直タブ文字 (≡ \013)
\* リテラル *、任意の句読点文字の場合 *
\123 8 進数の文字コード (最大 3 桁)
\x7F 16 進文字コード (正確に 2 桁)
\x{10FFFF} 16 進文字コード
\C UTF-8 モードでもシングル バイトに一致
\Q...\E ... に句読点がある場合でも、リテラル テキスト ...
\1 逆参照 (サポート対象外)
\b 後退文字 (サポート対象外) (\010 を使用)
\cK char ^K を制御 (サポート対象外) (\001 などを使用)
\e エスケープ (サポート対象外) (\033 を使用)
\g1 逆参照 (サポート対象外)
\g{1} 逆参照 (サポート対象外)
\g{+1} 逆参照 (サポート対象外)
\g{-1} 逆参照 (サポート対象外)
\g{name} 名前付き逆参照 (サポート対象外)
\g<name> サブルーチン呼び出し (サポート対象外)
\g'name' サブルーチン呼び出し (サポート対象外)
\k<name> 名前付き逆参照 (サポート対象外)
\k'name' 名前付き逆参照 (サポート対象外)
\lX 小文字 X (サポート対象外)
\ux 大文字 x (サポート対象外)
\L...\E 小文字テキスト ... (サポート対象外)
\K $0 の開始のリセット (サポートされていません)
\N{name} 名前付き Unicode 文字 (サポート対象外)
\R 行の中断 (サポート対象外)
\U...\E 大文字テキスト ... (サポート対象外)
\X 拡張 Unicode シーケンス (サポート対象外)
\%d123 10 進文字 123 (サポート対象外) VIM
\%xFF 16 進文字 FF (サポート対象外) VIM
\%o123 8 進文字 123 (サポート対象外) VIM
\%u1234 Unicode 文字 0x1234 (サポート対象外) VIM
\%U12345678 Unicode 文字 0x12345678 (サポート対象外) VIM

文字クラスの要素

説明
x 1 文字
A-Z 文字範囲 (含む)
\d Perl 文字クラス
[:foo:] ASCII 文字クラス foo
\p{Foo} Unicode 文字クラス Foo
\pF Unicode 文字クラス F (1 文字の名前)

文字クラス要素としての名前付き文字クラス

説明
[\d] 数字 (≡ \d)
[^\d] 数字ではない (≡ \D)
[\D] 数字ではない (≡ \D)
[^\D] 数字以外ではない (≡ \d)
[[:name:]] 文字クラス内の名前付き ASCII クラス (≡ [:name:])
[^[:name:]] 否定された文字クラス内の名前付き ASCII クラス (≡ [:^name:])
[\p{Name}] 文字クラス内の名前付き Unicode プロパティ (≡ \p{Name})
[^\p{Name}] 否定された文字クラス内の名前付き Unicode プロパティ (≡ \P{Name})

Perl 文字クラス

ASCII のみ

説明
\d 数字 (≡ [0-9])
\D 数字なし (≡ [^0-9])
\s 空白文字 (≡ [\t\n\f\r ])
\S 空白文字ではない (≡ [^\t\n\f\r ])
\w ワード文字 (≡ [0-9A-Za-z_])
\W ワード文字ではない (≡ [^0-9A-Za-z_])
\h 水平間隔 (サポート対象外)
\H 水平間隔ではない (サポート対象外)
\v 垂直間隔 (サポート対象外)
\V 垂直間隔ではない (サポート対象外)

ASCII 文字クラス

説明
[[:alnum:]] 英数字 (≡ [0-9A-Za-z])
[[:alpha:]] アルファベット (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] 空白 (≡ [\t ])
[[:cntrl:]] 制御 (≡ [\x00-\x1F\x7F])
[[:digit:]] 数字 (≡ [0-9])
[[:graph:]] グラフィカル (≡ [!-~][A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_{ |}~] )
[[:lower:]] 小文字 (≡ [a-z])
[[:print:]] 印刷可能 (≡ [ -~][ [:graph:]] )
[[:punct:]] 句読点 (≡ [!-/:-@[-{-~])
[[:space:]] 空白文字 (≡ [\t\n\v\f\r ])
[[:upper:]] 大文字 (≡ [A-Z])
[[:word:]] ワード文字 (≡ [0-9A-Za-z_])
[[:xdigit:]] 16進数 (≡ [0-9A-Fa-f] )

Unicode 文字クラス名

全般

説明
C other
Cc control
Cf format
Cn 未割り当てのコード ポイント (サポート対象外)
Co 個人用
Cs サロゲート
L 文字
LC 大文字と小文字の区別 (サポート対象外)
L& 大文字と小文字の区別 (サポート対象外)
Ll 小文字
Lm 修飾文字
Lo その他の文字
Lt タイトル文字
Lu 大文字
M mark
Mc 空白記号
Me 囲み記号
Mn nonspacing mark
N number
Nd 10 進数
Nl 文字番号
No その他の番号
P 句読点
Pc 接続符号
Pd ダッシュ符号
Pe 右かっこ
Pf 最後の句読点
Pi 最初の句読点
Po その他の句読点
Ps 左かっこ
S 記号
Sc 通貨記号
Sk アクセント記号
Sm 数学記号
So その他の記号
Z separator
Zl 行区切り
Zp 段落区切り
Zs 空白区切り

スクリプト

スクリプト
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

VIM 文字クラス

説明
\i 識別子文字 (サポート対象外) VIM
\I \i 数字を除く (サポート対象外) VIM
\k キーワード文字 (サポート対象外) VIM
\K \k 数字を除く (サポート対象外) VIM
\f ファイル名文字 (サポート対象外) VIM
\F \f 数字を除く (サポート対象外) VIM
\p 印刷可能文字 (サポート対象外) VIM
\P \p 数字を除く (サポート対象外) VIM
\s 空白文字 (≡ [ \t]) (サポート対象外) VIM
\S 空白以外の文字 (≡ [^ \t]) (サポート対象外) VIM
\d 数字 (≡ [0-9] ) VIM
\D \dではない VIM
\x 16 進数字 (≡ [0-9A-Fa-f] ) (サポート対象外) VIM
\X \xではない (サポート対象外) VIM
\o 8 進数字 (≡ [0-7] ) (サポート対象外) VIM
\O \oではない (サポート対象外) VIM
\w ワード文字 VIM
\W \wではない VIM
\h ワード文字のヘッド (サポート対象外) VIM
\H \hではない (サポート対象外) VIM
\a アルファベット (サポート対象外) VIM
\A \aではない (サポート対象外) VIM
\l 小文字 (サポート対象外) VIM
\L 小文字ではない (サポート対象外) VIM
\u 大文字 (サポート対象外) VIM
\U 大文字ではない (サポート対象外) VIM
\_x 任意のxに対して\xが新しい列を追加 (サポート対象外) VIM
\c 大文字と小文字の区別を無視 (サポート対象外) VIM
\C 大文字と小文字を一致 (サポート対象外) VIM
\m マジック (サポート対象外) VIM
\M nomagic (サポート対象外) VIM
\v verymagic (サポート対象外) VIM
\V verynomagic (サポート対象外) VIM
\Z Unicode の組み合わせ文字の違いを無視する (サポート対象外) VIM

マジック

説明
(?{code}) 任意の Perl コード (サポート対象外) PERL
(??{code}) 延期済み任意の Perl コード (サポート対象外) PERL
(?n) regexp キャプチャ グループ n への再帰呼び出し(サポート対象外)
(?+n) 関連キャプチャ グループ +n への再帰呼び出し(サポート対象外)
(?-n) 関連キャプチャ グループ -n への再帰呼び出し(サポート対象外)
(?C) PCRE コールアウト (サポート対象外) PCRE
(?R) regexp 全体の再帰呼び出し (≡ (?0) ) (サポート対象外)
(?&name) 名前付きグループ への再帰呼び出し(サポート対象外)
(?P=name) 名前付き逆参照 (サポート対象外)
(?P>name) 名前付きグループ への再帰呼び出し(サポート対象外)
(?(cond)true\|false) 条件分岐 (サポート対象外)
(?(cond)true) 条件分岐 (サポート対象外)
(*ACCEPT) 正規表現を Prolog のようにする(サポート対象外)
(*COMMIT) (サポート対象外)
(*F) (サポート対象外)
(*FAIL) (サポート対象外)
(*MARK) (サポート対象外)
(*PRUNE) (サポート対象外)
(*SKIP) (サポート対象外)
(*THEN) (サポート対象外)
(*ANY) 改行規則の設定 (サポート対象外)
(*ANYCRLF) (サポート対象外)
(*CR) (サポート対象外)
(*CRLF) (サポート対象外)
(*LF) (サポート対象外)
(*BSR_ANYCRLF) \R 規約を設定する (サポート対象外) PCRE
(*BSR_UNICODE) (サポート対象外) PCRE