メインコンテンツにスキップ
eLearner.app

インタラクティブコース

正規表現コース

すべてのパターンをブラウザで直接実行し、リアルタイムで一致を表示するエンジンを使用して、正規表現を英語で一から学習します。

01 · モジュール 1 — 基本

4 レッスン

正規表現の基礎: リテラル パターン、基本文字クラス、「.」ワイルドカード、およびエスケープ メタ文字。

  1. 1.1リテラルパターン通常の文字、大文字と小文字の区別、および最初の実行: 一致とインデックス。~8 min
  2. 1.2基本クラス: \d \w \s数字、単語文字、および空白 (およびそれらの否定バージョン) の事前定義クラス。~10 min
  3. 1.3ワイルドカード: ドット「.」「.」文字は、含まれる内容、除外される内容、および「s」フラグが重要である理由など、ほとんどすべてに一致します。~8 min
  4. 1.4メタ文字のエスケープ二重バックスラッシュが必要な場合、「\」でエスケープする必要がある 12 個のメタ文字とその理由。~10 min

02 · モジュール 2 — 量指定子

4 レッスン

繰り返す量: `*`、`+`、`?`、間隔 `{n,m}`、および貪欲と怠惰の違い。

  1. 2.1`*`、`+`、`?`0 個以上、1 個以上、オプション: 3 つの基本的な量指定子。~10 min
  2. 2.2正確な数量 `{n,m}`正確に `n`、`n` から `m` まで、少なくとも `n`: 数値数量子。~10 min
  3. 2.3貪欲 vs 怠け者デフォルトでは、量指定子は貪欲 (`.*`) です。遅延バージョン (`.*?`) の場合は `?` を追加します。~10 min
  4. 2.4バックトラッキング: 概要貪欲な量指定子が失敗したときにエンジンが何をするか、そしてなぜコストがかかるのか。~12 min

03 · モジュール 3 — アンカーと境界

4 レッスン

文字ではなく位置: 文字列の先頭/末尾、単語の境界、および「m」フラグを使用した各行の先頭/末尾にアンカーします。

  1. 3.1開始と終了: `^` と `$`パターンを文字列の最初または最後の文字に固定します。~8 min
  2. 3.2単語の境界: `\b` `\B`単語と単語以外の文字の間の移行。単語全体を見つけること。~10 min
  3. 3.3`m` フラグ: 複数行`m` フラグを使用すると、`^` と `$` が各行の先頭/末尾にアンカーされます。~10 min
  4. 3.4空行とトリミング便利なパターン: 空行のマッチング、行頭/行末の空白のトリミング。~10 min

04 · モジュール 4 — グループと交代

4 レッスン

`()` でグループ化し、`|` で選択肢の中から選択し、`(?:...)` でキャプチャを回避し、`(?<name>...)` でグループに名前を付け、後方参照で前のキャプチャを参照します。

  1. 4.1キャプチャグループ: `(...)`グループ化してキャプチャするためのかっこ。試合でグループ 1、2、3… にアクセスします。~10 min
  2. 4.2代替: `|`パイプは 2 つ以上のサブパターンから選択します。優先順位と括弧。~10 min
  3. 4.3非キャプチャグループ: `(?:...)`キャプチャを作成せずにグループ化: 定量化または代替のみが必要な場合に便利です。~10 min
  4. 4.4名前付きグループと後方参照`(?<name>...)` で名前を付けます。 `\1` `\k<name>` はキャプチャを参照します。~12 min

05 · モジュール 5 — 文字クラス

4 レッスン

`[...]` でカスタム セットを定義し、範囲を使用し、`[^...]` で否定し、`\p{...}` と `u` フラグを使って Unicode プロパティにアクセスします。

  1. 5.1文字セット: `[abc]`角括弧は、1 つの位置で許可される文字のセットを定義します。~8 min
  2. 5.2クラス内の範囲: `[a-z0-9]`ダッシュによる間隔。範囲と単一文字を組み合わせます。~8 min
  3. 5.3否定: `[^...]`否定クラスは、リストされた文字を**除く**ものと一致します。~8 min
  4. 5.4Unicode プロパティのエスケープ`\p{L}`、`\p{N}`、`\p{Script=...}` と `u` フラグ: セマンティック Unicode クラス。~12 min

06 · モジュール 6 — ルックアラウンド

4 レッスン

ゼロ幅アサーション: 文字を消費せずに文字列内を前方または後方に検索します。先読み`(?=)``(?!)`、後読み`(?<=)``(?<!)`。

  1. 6.1肯定的な先読み: `(?=...)`特定のパターンが現在位置を消費せずにたどることを確認します。~10 min
  2. 6.2否定先読み: `(?!...)`特定のパターンが現在位置に従っていないことを確認します。~10 min
  3. 6.3後読み: `(?<=...)` `(?<!...)`lookaround の「後ろ向き」バージョン。 ES2018+ のサポート。~12 min
  4. 6.4実際のルックアラウンドコンテキストを含めずに値を抽出し、パスワードを検証し、区切り数字を解析します。~12 min

07 · モジュール 7 — フラグ、置換、分割

4 レッスン

すべてのフラグ (`d`、`v` を含む)、正規表現を使用した `String.prototype.replace`/`replaceAll`/`split` は、置換文字列および replace コールバック内の `$1`/`$<name>` を参照します。

  1. 7.1すべてのフラグの詳細`gi m s u v y d`: それぞれが何をするのか、どのように組み合わせるのか。~12 min
  2. 7.2基本的な置換と `$1`一致を固定文字列または後方参照 `$1` / `$<name>` に置き換えます。~10 min
  3. 7.3コールバックに置き換える置換機能:すべての一致を任意のJSコードで変換し、グループにアクセスします。~12 min
  4. 7.4正規表現で分割するパターンに基づいて文字列を分割します (寛容な CSV、最小限のトークナイザー)。~10 min

08 · モジュール 8 — 実践

4 レッスン

実際の問題についてすべてをまとめます。電子メールの検証、ログの解析、URL/IP の抽出、ReDoS 耐性パターンの作成などです。

  1. 8.1電子メールの検証電子メールの「十分な」パターンとそのトレードオフについて説明します。~12 min
  2. 8.2Apacheログパーサー名前付きグループを使用して、ログ行から IP、メソッド、パス、ステータス コードを抽出します。~12 min
  3. 8.3URLとIPの抽出自由形式のテキスト内の http(s) URL と IPv4 アドレスを認識します。~12 min
  4. 8.4ReDoS セーフなパターンの作成壊滅的なパターン (`(a+)+b`) を認識し、それらをリファクタリングし、アトミックな量指定子を使用します。~14 min