正規表現構文
適用対象: ✅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+
が開始位置を見つけるために逆一致が実行されます。