Lompati ke konten utama
Modul 4 · Pelajaran 3 dari 415/32 dalam kursus~10 min
Pelajaran modul (3/4)

Grup yang tidak menangkap: `(?:...)`

Seringkali tanda kurung diperlukan hanya untuk mengelompokkan (mengukur, bergantian) dan BUKAN untuk mengekstraksi nilainya. Dalam hal ini gunakan non-capturing versi: (?:...). Ini berfungsi sama dengan (...) tetapi tidak membuat kelompok yang diberi nomor.

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?) mengelompokkan skema untuk menerapkan pembilang ?, namun kami tidak tertarik untuk mengekstrak https sebagai grup: grup 1 secara langsung adalah domain.

Mengapa menggunakannya

  1. Keterbacaan: pembaca segera memahami bahwa grup ini hanya ada untuk itu struktur, bukan untuk mengekstraksi nilai.
  2. Performa: mesin tidak harus menyimpan pertandingan grup.
  3. Penomoran bersih: grup yang diberi nomor tetap selaras "informasi yang sebenarnya saya butuhkan", tanpa gangguan.

Mengoptimalkan dengan grup yang tidak menangkap

Penggunaan (?:...) memberi tahu mesin untuk menerapkan aturan pengelompokan dan penghitungan tanpa membuang memori untuk menyimpan hasil pencocokan perantara. Ini sangat disarankan dalam loop berat atau pemrosesan teks yang sangat panjang.

Cobalah

Latihan#regex.m4.l3.e1
Upaya: 0Memuat…

Ekstrak domain (`example.com`, `test.org`…) dari setiap URL dalam teks. Gunakan `(?:https?)` untuk protokol (tidak perlu menangkapnya) dan satu grup untuk domain.

Memuat editor…
Tunjukkan petunjuk

Ubah grup pertama dari (https?) menjadi (?:https?): tidak perlu menangkapnya, Anda hanya menginginkan domainnya.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#regex.m4.l3.e2
Upaya: 0Memuat…

Temukan setiap pengulangan `ab` sebagai satu kecocokan, tetapi TANPA menangkap grup (karena Anda hanya memerlukan keseluruhan kecocokan).

Memuat editor…
Tunjukkan petunjuk

Sintaks yang sama seperti pelajaran sebelumnya, tetapi dengan (?:ab)+ bukannya (ab)+.

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#regex.m4.l3.e3
Upaya: 0Memuat…

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

Memuat editor…
Tunjukkan petunjuk

Gunakan (?:\\.\\d{2})? untuk menjadikan bagian desimal opsional tanpa menangkapnya.

Solusi tersedia setelah 3 upaya