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

非キャプチャグループ: `(?:...)`

多くの場合、括弧は グループ化 (数値化、代替) の場合にのみ必要になります。 値を抽出しません。その場合は 非キャプチャ を使用してください バージョン: (?:...)。 (...) と同じように機能しますが、作成されません 番号が付けられたグループ。

Code
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 は直接 ドメイン。

なぜそれを使うのか

  1. 読みやすさ: 読者は、このグループが目的のためにのみ存在していることをすぐに理解します。 構造体であり、値を抽出するものではありません。
  2. パフォーマンス: エンジンはグループの一致を保存する必要はありません。
  3. クリーンな番号付け: 番号付きグループは常に一致しています。 「本当に必要な情報」を干渉せずに。

非キャプチャグループを使用した最適化

(?:...) を使用すると、中間一致結果を保存するメモリを無駄にせずに、グループ化ルールと数量指定子ルールを適用するようにエンジンに指示します。これは、負荷の高いループや非常に長いテキスト処理の場合に強くお勧めします。

試してみてください

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

テキスト内のすべての URL からドメイン (`example.com`、`test.org`…) を抽出します。プロトコルには「(?:https?)」を使用し(キャプチャする必要はありません)、ドメインには単一のグループを使用します。

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

最初のグループを (https?) から (?:https?) に変更します。キャプチャする必要はありません。必要なのはドメインだけです。

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

復習演習

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

「ab」のすべての繰り返しを 1 つの一致として検索しますが、グループはキャプチャしません (一致全体のみが必要なため)。

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

前のレッスンと同じ構文ですが、(ab)+ の代わりに (?:ab)+ を使用します。

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

追加の課題

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

Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.

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

(?:\\.\\d{2}) を使用しますか?小数部分をキャプチャせずにオプションにします。

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