適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
この記事では、Kusto 照会言語 (KQL)でサポートされる正規表現構文の概要について説明します。
matches regex、parse、replace_regex()などの正規表現を使用して文字列の照合、選択、抽出を実行する KQL 演算子と関数は多数あります。
KQL では、正規表現を 文字列リテラルとしてエンコードし 文字列の引用符で囲む規則に従う必要があります。 たとえば、正規表現 \A は KQL で "\\A"として表されます。 余分な円記号は、他の円記号が正規表現 \Aの一部であることを示します。
構文
次のセクションでは、Kusto でサポートされる正規表現の構文について説明します。
1 文字に一致する
| パターン | 説明 |
|---|---|
. |
改行を除く任意の文字 (s フラグ付きの改行を含む) |
[0-9] |
任意の ASCII 桁 |
\d |
Digit (\p{Nd}) |
\D |
数字ではない |
\pX |
1 文字の名前で識別される Unicode 文字クラス |
\p{Greek} |
Unicode 文字クラス (一般的なカテゴリまたはスクリプト) |
\PX |
1 文字の名前で識別される否定 Unicode 文字クラス |
\P{Greek} |
否定 Unicode 文字クラス (一般的なカテゴリまたはスクリプト) |
文字クラス
| パターン | 説明 |
|---|---|
[xyz] |
x、y、または z (共用体) のいずれかに一致する文字クラス。 |
[^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]] |
交差と否定を使用した減算 (4 を除く 0 から 9 に一致) |
[0-9--4] |
直接減算 (4 を除く 0 から 9 に一致) |
[a-g~~b-h] |
対称差 (一致する a と h のみ) |
[\[\]] |
文字クラスでのエスケープ (一致する [ または ]) |
[a&&b] |
何も一致しない空の文字クラス |
Note
名前付き文字クラスは、角かっこで囲まれた [...] 文字クラス内に含まれる場合があります。 たとえば、 [\p{Greek}[:digit:]] は、 Greek スクリプト内の任意の ASCII 桁または任意のコードポイントと一致します。 [\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]]。
合成
| パターン | 説明 |
|---|---|
xy |
連結 (x の後に yが続く) |
x\|y |
代替 (x または y 、 xを優先) |
繰り返し
| パターン | 説明 |
|---|---|
x* |
0 個以上の x (最長一致) |
x+ |
1 つ以上の x (最長一致) |
x? |
0 または 1 の x (最長一致) |
x*? |
0 個以上の x (ungreedy/lazy) |
x+? |
1 つ以上の x (ungreedy/lazy) |
x?? |
ゼロまたは x の 1 つ (ungreedy/lazy) |
x{n,m} |
少なくとも n x および最大 m x (最長) |
x{n,} |
少なくとも n x (最長一致) |
x{n} |
正確に n x |
x{n,m}? |
少なくとも n x および最大 m x (ungreedy/lazy) |
x{n,}? |
少なくとも n x (ungreedy/lazy) |
x{n}? |
正確に n x |
空の一致
| パターン | 説明 |
|---|---|
^ |
干し草の山の始まり (または複数行モードの行の開始) |
$ |
干し草の山の終わり (または複数行モードの行の終わり) |
\A |
干し草の山の始まりのみ (複数行モードが有効になっている場合でも) |
\z |
干し草の山の終わりのみ (複数行モードが有効になっている場合でも) |
\b |
Unicode ワード境界 (一方の側で\w され、もう一方の側で \W、 \A、または \z ) |
\B |
Unicode ワード境界ではない |
\b{start}, \< |
Unicode の単語開始境界 (左側に\W\|\A 、右側に \w ) |
\b{end}, \> |
Unicode の単語の終わりの境界 (左側に\w 、右側に \W\|\z ) |
\b{start-half} |
Unicode の単語開始境界の半分 (左側に\W\|\A ) |
\b{end-half} |
Unicode の単語の終わりの境界の半分 (右側に\W\|\z ) |
グループ化とフラグ
| パターン | 説明 |
|---|---|
(exp) |
番号付きキャプチャ グループ (左かっこでインデックス付け) |
(?P<name>exp) |
名前付き (番号付き) キャプチャ グループ (名前は英数字にする必要があります) |
(?<name>exp) |
名前付き (番号付き) キャプチャ グループ (名前は英数字にする必要があります) |
(?:exp) |
非キャプチャ グループ |
(?flags) |
現在のグループ内でフラグを設定する |
(?flags:exp) |
exp のフラグを設定する (非キャプチャ) |
キャプチャ グループ名には、英数字の Unicode コードポイント、ドット .、アンダースコア _、角かっこ[ および ]のみを含めることができます。 名前は、 _ またはアルファベットのコードポイントで始まる必要があります。 アルファベットコードポイントは Alphabetic Unicode プロパティに対応し、数値コードポイントは Decimal_Number、 Letter_Number 、および Other_Number の一般的なカテゴリの和集合に対応します。
フラグは 1 文字です。 たとえば、(?x)フラグxを設定し、フラグxをクリア(?-x)します。 複数のフラグを同時に設定またはクリアできます。(?xy)xフラグとy フラグの両方を設定し、(?x-y)x フラグを設定してyフラグをクリアします。 既定では、特に明記されていない限り、すべてのフラグは無効になります。 これらは次のとおりです。
| フラグ | 説明 |
|---|---|
i |
大文字と小文字を区別しない: 大文字と小文字の両方に一致する文字 |
m |
複数行モード: ^ と $ 一致する行の開始/終了 |
s |
ドット (.) を許可します。 一致する \n |
R |
CRLF モードを有効にする: 複数行モードが有効な場合、 \r\n が使用されます |
U |
x*の意味を入れ替え、x*? |
u |
Unicode のサポート (既定で有効) |
x |
詳細モード。空白を無視し、行コメントを許可します (# 以降) |
詳細モードでは、文字クラス内を含め、すべての場所で空白が無視されることに注意してください。 空白を挿入するには、エスケープされた形式または 16 進リテラルを使用します。 たとえば、ASCII 空間の \ や \x20 などです。
Note
- フラグはパターン内で切り替えることができます。 たとえば、次の構文では、最初の部分では大文字と小文字が区別されない一致が使用され、2 番目の部分では大文字と小文字が区別される一致が使用されます:
(?i)a+(?-i)b+。 a+はaまたはAのいずれかと一致しますが、b+はbにのみ一致します。- 複数行モードは、
^と$入力の先頭または末尾だけでなく、行の先頭または末尾でも一致しなくなります。^は、入力の最後であっても、新しい行の後に一致します。 - CRLF モードと複数行モードの両方が有効になっている場合、
^と$は、\rと\nのいずれかと一致しますが、\r\nの途中には一致しません。 - Unicode モードは選択的に無効にすることもできますが、結果が無効な UTF-8 と一致 場合にのみ 。 たとえば、Unicode ワード境界ではなく 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 進文字コード (正確に 2 桁) |
\x{10FFFF} |
Unicode コード ポイントに対応する 16 進文字コード |
\u007F |
16 進文字コード (正確に 4 桁) |
\u{7F} |
Unicode コード ポイントに対応する 16 進文字コード |
\U0000007F |
16 進文字コード (正確に 8 桁) |
\U{7F} |
Unicode コード ポイントに対応する 16 進文字コード |
\p{Letter} |
Unicode 文字クラス |
\P{Letter} |
否定 Unicode 文字クラス |
\d、 \s、 \w |
Perl 文字クラス |
\D、 \S、 \W |
否定された Perl 文字クラス |
Perl 文字クラス (Unicode フレンドリ)
これらのクラスは、 UTS#18 で提供される定義に基づいています。
| パターン | 説明 |
|---|---|
\d |
Ddigit (\p{Nd}) |
\D |
数字以外 |
\s |
空白 (\p{White_Space}) |
\S |
空白ではない |
\w |
Word 文字 (\p{Alphabetic} + \p{M} + \d + \p{Pc} + \p{Join_Control}) |
\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]) |
パフォーマンス
このセクションでは、正規表現式の速度とリソースの使用に関するいくつかのガイダンスを提供します。
Unicode はメモリ使用量と検索速度に影響する可能性があります
KQL 正規表現では、Unicode に対するファースト クラスのサポートが提供されます。 多くの場合、Unicode をサポートするために必要な余分なメモリはごくわずかであり、通常は検索速度には影響しません。
メモリ使用量と検索速度に影響を与える可能性がある Unicode 文字クラスの例を次に示します。
メモリ使用量: Unicode の影響は、主に Unicode 文字クラスの使用によって生じます。 Unicode 文字クラスのサイズは大きくなる傾向があります。 たとえば、
\w文字クラスは、既定で約 140,000 個の個別のコードポイントと一致します。 これには追加のメモリが必要であり、正規表現のコンパイルが遅くなる可能性があります。 ASCII で要件を満たすことができる場合は、Unicode クラスではなく ASCII クラスを使用することをお勧めします。\wの ASCII 専用バージョンは、複数の方法で表すことができます。これらはすべて同等です。[0-9A-Za-z_] (?-u:\w) [[:word:]] [\w&&\p{ascii}]検索速度: Unicode は、大きな Unicode 文字クラスを使用する場合でも、かなり適切に処理される傾向があります。 ただし、より高速な内部正規表現エンジンの中には、Unicode 対応の単語境界アサーションを処理できないものもあります。 そのため、Unicode 対応の単語境界アサーションが不要な場合は、
\bではなく(?-u:\b)を使用することを検討してください。(?-u:\b)では、単語文字の ASCII のみの定義が使用されるため、検索速度を向上させることができます。
リテラルは検索を高速化できる
KQL 正規表現には、正規表現パターン内でリテラルを認識する強力な機能があり、検索を大幅に高速化できます。 可能であれば、パターンにリテラルを含めると、検索のパフォーマンスが大幅に向上します。 たとえば、正規表現 \w+@\w+では、最初に出現する @ が一致し、次に \w+ が開始位置を見つけるために逆一致が実行されます。