メインコンテンツにスキップ
モジュール 6 · レッスン 4 / 4コース内の 24/32~12 min
モジュールのレッスン (4/4)

実際のルックアラウンド

現実世界のシナリオで 4 つのルックアラウンド形式をすべて組み合わせてみましょう。 次のような場合に、ルックアラウンドが威力を発揮します。

  1. 値を識別するコンテキストを含まずに値を抽出します。
  2. 複数の独立した条件に対して文字列を 検証します。
  3. 一部の条件を満たすが他の条件を満たさない一致を フィルター します。

パスワードの検証

Code
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$
Checks:
  - at least one uppercase     (?=.*[A-Z])
  - at least one digit         (?=.*\d)
  - at least one symbol        (?=.*[^a-zA-Z\d])
  - minimum length 8           .{8,}

各先読みでは、先頭 (^) から開始して 1 つの条件をチェックします。彼らは すべてゼロ幅: エンジンは位置 0 に留まり、その後次のように消費します。 .{8,}$。

区切り文字間の抽出

Code
Pattern: (?<=\().+?(?=\))
Sample:  Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (without parentheses)

後読み + 先読み + 遅延量指定子: 内部のコンテンツを抽出します 括弧は含めずに記述します。

先読みと後読みの組み合わせ

先読みと後読みを一緒に使用すると、特定のタグまたは形式内にある文字列を分離できます (たとえば、最終一致にタグを含めずに 2 つのタグ間のテキストを抽出する)。これにより、その後の文字列のクリーンアップ操作が回避されます。

試してみてください

運動#regex.m6.l4.e1
試行回数: 0読み込み中…

ログからすべての `key=value` 割り当ての値を抽出します。値のみ (キーや `=` はありません)。値には文字と数字を含めることができます。

エディターを読み込み中…
ヒントを表示

`=` を後読み (?<==) 内に移動します。この方法では、一致には値のみが含まれます。

3 回の試行後に解決策が利用可能になります

復習演習

運動#regex.m6.l4.e2
試行回数: 0読み込み中…

少なくとも 1 つの大文字と少なくとも 1 つの数字を含む単語 (順序は任意) をテキスト内で見つけます。

エディターを読み込み中…
ヒントを表示

先頭での二重先読み: (?=\\w*[A-Z])(?=\\w*\\d)。次に、\\w+ を使用して単語を消費します。

3 回の試行後に解決策が利用可能になります

追加の課題

運動#regex.m6.l4.e3
試行回数: 0読み込み中…

Extract only numerical digits that are enclosed exactly between parentheses, e.g. extract `102` from `(102)` without capturing the parentheses.

エディターを読み込み中…
ヒントを表示

Combine a positive lookbehind (?<=\( ) for the open parenthesis and a positive lookahead (?=\) ) for the closed one.

3 回の試行後に解決策が利用可能になります