正規表現は、テキスト内の文字を一致させるために使用されるパターンです。 このトピックでは、正規表現の使用を開始する方法について説明します。
このトピックには、サードパーティのツールに関する情報が含まれます。 情報は参照だけのためです。 Alibaba Cloudは、サードパーティツールのパフォーマンスと信頼性、またはこれらのツールに対する操作の潜在的な影響を保証またはコミットメントしません。
正規表現に慣れていない場合は、regex101などのツールを使用して正規表現を練習またはデバッグできます。 これらのツールは、テキスト内の正規表現と正規表現の照合プロセスを視覚化します。 このトピックでは、regex101を使用して正規表現の例を示します。
構文
正規表現は、リテラル文字、メタ文字、区切り文字、エスケープ文字など、さまざまな種類の文字で構成されます。
リテラル文字: 文字とそのまま一致します。
Metacharacter: 特定の文字または文字セットに一致します。 たとえば、ピリオド (
.
) は任意の文字と一致し、\d
は任意の数字と一致します。区切り文字: 正規表現の開始または終了を示します。 ほとんどの場合、スラッシュ (
/
) または数字記号 (#
) が区切り文字として使用されます。エスケープ文字: メタキャラクターやリミッターなどの特別な使用のための文字を、その文字通りの意味にエスケープします。 後方スラッシュ (
\
) はエスケープ文字として使用されます。 たとえば、\.
期間を一致させることができます。
デフォルトでは、regex101ツールは、次の図に示すように、正規表現a.\d\.
の前に区切り文字 (/
) を追加します。 正規表現では、a
は文字と一致します。
は任意の文字に一致し、\d
は任意の数字に一致し、\
ピリオドに一致します。
一般的に使用される文字を次の表に示します。
サポートされる文字と構文は、プログラミング言語と正規表現エンジンによって異なります。 使用するプログラミング言語と正規表現エンジンに基づいて正規表現を指定する必要があります。
キャラクター | 説明 |
| 改行以外の文字と一致します。 |
| 任意の数字と一致し、[0-9] に相当します。 |
| 数字以外の文字と一致し、[^ 0-9] に相当します。 |
| 任意の文字、数字、またはアンダースコア (_) と一致し、[A-Za-z0-9_] と同等です。 |
| 文字、数字、アンダースコア (_) 以外の文字と一致し、[^ A-Za-z0-9_] と同等です。 |
| 空白、タブ、改行など、空白文字と一致します。 |
| 空白以外の文字と一致します。 |
| 単語文字と単語以外の文字の間の位置である単語境界に一致します。 |
| 単語以外の境界に一致します。 |
| 前の文字を0回または複数回照合します。 |
| 前の文字と1回以上一致します。 |
| 前の文字が0または1回一致します。 |
| OR演算子に基づいて1つの要素と一致します。 |
| 前の文字とn回一致します。 |
| 前の文字と少なくともn回一致します。 |
| 前の文字を少なくともn回、最大でm回照合します。 |
| 文字セット内の任意の文字と一致します。 |
| 文字セット内の文字以外の文字と一致します。 |
| 文字列の先頭と一致します。 |
| 文字列の末尾と一致します。 |
| グループを表します。 括弧のペア内の文字のグループは、全体として考慮されます。 |
| 正規表現の開始と終了をマークします。 この文字は通常、区切り文字として使用されます。 |
| メタキャラクターやリミッターなどの特別な使用のためにキャラクターをその文字通りの意味にエスケープします。 後方スラッシュ ( |
例
例1: 指定されたキーワードを含む文字列の一致
05/Jan/2023
キーワードを含むログをフィルターします。
サンプルログ: Info 05/Jan/2023警告およびInfo 06/Jan/2023エラー
正規表現:
. * 05\/Jan\/2023.*
.*
はゼロまたは複数の文字に一致します。 この例では、05/Jan/2023
の前後の文字に関係なく、ログが一致します。05\/Jan\/2023
は、マッチング用の05/Jan/2023
キーワードを表します。Logtailは、スラッシュ (
/
) を区切り文字として使用する正規表現をサポートしています。 この場合、エスケープ文字 (\
) が必要です。 エスケープ文字を追加する必要があります (\
) スラッシュの前 (/
) を使用して、スラッシュ (/) を文字通りの意味にエスケープします。
例2: 携帯電話番号の一致
11桁の携帯電話番号を含むログをフィルタリングします。 数字は111または222で始まります。
サンプルログ: 11144445555、22266667777、33388889999
正規表現:
(111 | 222)\d{8}
携帯電話番号では、最初の3桁はオペレータコード、中央の4桁は市外局番、最後の4桁は任意の桁です。 オペレータコードは111または222のみであり、エリアコードは任意の数字であると仮定する。
(111 | 222)
は、サポートされている値111と222を含むグループを表します。\d
は任意の数字と一致します。{8}
は、\d
が任意の数字と8回一致することを指定します。 その結果、合計8桁が一致する。
例3: 完全な文字列の一致
ログを [時間] [レベル] [モジュール] [情報]
形式でフィルタリングします。 時刻はyyyy-mm-dd hh:mm:ss
形式です。 レベルは、DEBUG、INFO、WARN、またはERRORです。 モジュールと情報は任意の文字列です。
サンプルログ: [2021-09-23 10:23:45] [情報] [ユーザーログイン] [ユーザーログイン成功]
正規表現:
^\[\d{4}\-\d{2}\-\d{2} \d{2 }:\ d{2 }:\ d{2}\] \[(デバッグ | 情報 | 警告 | エラー)\] \[.+\] \[.+\]$
\[
と\]
は[]
に一致するため、[]
は正規表現の構文で特別な意味を持ち、エスケープ文字 (\
) が必要です。\[\d{4}\-\d{2}\-\d{2} \d{2 }:\ d{2 }:\ d{2}\]
はすべての日付と時刻に一致します。\[(DEBUG | INFO | WARN | ERROR)\]
はすべてのレベルのログに一致します。\[.+\] \[.+\]$
は、空でない文字列に一致します。
例4: 指定されたキーワードで始まらない文字列の一致
DEBUGで始まらないログのフィルター。
サンプルログ: DEBUG: test debugおよびINFO: test info
正規表現:
^(?! デバッグ) 。*
^
は文字列の先頭に一致します。 この例では、DEBUGは文字列の先頭です。(?!DEBUG)
は、DEBUGを含むログを除外します。(?!DEBUG)
は(?!<pattern>)
形式で否定的なアサートを指定します。<pattern>
は除外するコンテンツを指定します。.*
は、ログ行の末尾まで任意の文字と一致します。
例5: 指定されたキーワードを含まない文字列の一致
INFOまたはDEBUGを含まないログのフィルター。
サンプルログ: hello world、INFO、ERRORメッセージ、デバッグ、警告ログ、エラーINFO、デバッグ詳細、および情報ステータス
正規表現:
^(?!.* (情報 | デバッグ)).*
^
は文字列の先頭に一致します。 この例では、INFOまたはDEBUGが文字列の先頭です。(?!.*(INFO | DEBUG))
は、INFOまたはDEBUGを含むログを除外します。.*
は、ログ行の末尾まで任意の文字と一致します。