モジュールのレッスン (3/4)
非キャプチャグループ: `(?:...)`
多くの場合、括弧は グループ化 (数値化、代替) の場合にのみ必要になります。
値を抽出しません。その場合は 非キャプチャ を使用してください
バージョン: (?:...)。 (...) と同じように機能しますが、作成されません
番号が付けられたグループ。
Pattern: (?:https?)://(\w+\.\w+)
Sample: https://example.com e http://test.org
Match e gruppi:
match = "https://example.com" gruppo1 = "example.com"
match = "http://test.org" gruppo1 = "test.org"(?:https?) は、? 量指定子を適用するスキームをグループ化しますが、
https をグループとして抽出することに興味はありません。グループ 1 は直接
ドメイン。
なぜそれを使うのか
- 読みやすさ: 読者は、このグループが目的のためにのみ存在していることをすぐに理解します。 構造体であり、値を抽出するものではありません。
- パフォーマンス: エンジンはグループの一致を保存する必要はありません。
- クリーンな番号付け: 番号付きグループは常に一致しています。 「本当に必要な情報」を干渉せずに。
非キャプチャグループを使用した最適化
(?:...) を使用すると、中間一致結果を保存するメモリを無駄にせずに、グループ化ルールと数量指定子ルールを適用するようにエンジンに指示します。これは、負荷の高いループや非常に長いテキスト処理の場合に強くお勧めします。
試してみてください
テキスト内のすべての URL からドメイン (`example.com`、`test.org`…) を抽出します。プロトコルには「(?:https?)」を使用し(キャプチャする必要はありません)、ドメインには単一のグループを使用します。
ヒントを表示
最初のグループを (https?) から (?:https?) に変更します。キャプチャする必要はありません。必要なのはドメインだけです。
3 回の試行後に解決策が利用可能になります
復習演習
「ab」のすべての繰り返しを 1 つの一致として検索しますが、グループはキャプチャしません (一致全体のみが必要なため)。
ヒントを表示
前のレッスンと同じ構文ですが、(ab)+ の代わりに (?:ab)+ を使用します。
3 回の試行後に解決策が利用可能になります
追加の課題
Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.
ヒントを表示
(?:\\.\\d{2}) を使用しますか?小数部分をキャプチャせずにオプションにします。
3 回の試行後に解決策が利用可能になります