モジュールのレッスン (4/4)
実際のルックアラウンド
現実世界のシナリオで 4 つのルックアラウンド形式をすべて組み合わせてみましょう。 次のような場合に、ルックアラウンドが威力を発揮します。
- 値を識別するコンテキストを含まずに値を抽出します。
- 複数の独立した条件に対して文字列を 検証します。
- 一部の条件を満たすが他の条件を満たさない一致を フィルター します。
パスワードの検証
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,}$。
区切り文字間の抽出
Pattern: (?<=\().+?(?=\))
Sample: Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (without parentheses)後読み + 先読み + 遅延量指定子: 内部のコンテンツを抽出します 括弧は含めずに記述します。
先読みと後読みの組み合わせ
先読みと後読みを一緒に使用すると、特定のタグまたは形式内にある文字列を分離できます (たとえば、最終一致にタグを含めずに 2 つのタグ間のテキストを抽出する)。これにより、その後の文字列のクリーンアップ操作が回避されます。
試してみてください
ログからすべての `key=value` 割り当ての値を抽出します。値のみ (キーや `=` はありません)。値には文字と数字を含めることができます。
ヒントを表示
`=` を後読み (?<==) 内に移動します。この方法では、一致には値のみが含まれます。
3 回の試行後に解決策が利用可能になります
復習演習
少なくとも 1 つの大文字と少なくとも 1 つの数字を含む単語 (順序は任意) をテキスト内で見つけます。
ヒントを表示
先頭での二重先読み: (?=\\w*[A-Z])(?=\\w*\\d)。次に、\\w+ を使用して単語を消費します。
3 回の試行後に解決策が利用可能になります
追加の課題
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 回の試行後に解決策が利用可能になります