Ana içeriğe geç
Modül 4 · Ders 3 ders 4Kurstaki 15/32~10 min
Modül dersleri (3/4)

Yakalanmayan gruplar: `(?:...)`

Çoğu zaman parantezlere yalnızca gruplamak (ölçmek, değiştirmek) için ihtiyaç duyulur ve değeri çıkarmak için DEĞİL. Bu durumda yakalamayan seçeneğini kullanın sürüm: (?:...). (...) ile aynı şekilde çalışır ancak oluşturulmaz numaralı bir grup.

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?) şemayı ? niceleyiciyi uygulayacak şekilde gruplandırır, ancak biz https öğesini grup olarak çıkarmakla ilgilenmiyorum: grup 1 doğrudan alan adı.

Neden kullanıyorsunuz?

  1. Okunabilirlik: Okuyucu, grubun yalnızca bunun için orada olduğunu hemen anlar. yapı, bir değer çıkarmak değil.
  2. Performans: Motorun grubun eşleşmesini saklaması gerekmez.
  3. Temiz numaralandırma: numaralandırılmış gruplar birbirleriyle uyumlu kalır müdahale olmadan "gerçekten ihtiyacım olan bilgi".

Yakalamayan gruplarla optimizasyon

(?:...) kullanılması, motora ara eşleşme sonuçlarını saklayan belleği boşa harcamadan gruplama ve nicelik belirteci kurallarını uygulamasını söyler. Bu, ağır döngülerde veya çok uzun metin işlemede şiddetle tavsiye edilir.

Deneyin

Egzersiz#regex.m4.l3.e1
Denemeler: 0Yükleniyor…

Alan adını (`example.com`, `test.org`…) metindeki her URL'den çıkarın. Protokol için `(?:https?)` kullanın (yakalamaya gerek yoktur) ve alan adı için tek bir grup kullanın.

Düzenleyici yükleniyor…
İpucu göster

İlk grubu (https?) yerine (?:https?) olarak değiştirin: yakalamanıza gerek yok, yalnızca etki alanını istiyorsunuz.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#regex.m4.l3.e2
Denemeler: 0Yükleniyor…

'ab'nin her tekrarını tek bir eşleşme olarak bulun, ancak grubu yakalamadan (çünkü yalnızca tüm eşleşmeye ihtiyacınız var).

Düzenleyici yükleniyor…
İpucu göster

Önceki dersle aynı söz dizimi, ancak (ab)+ yerine (?:ab)+ ile.

3 denemeden sonra çözüm mevcut

Ek zorluk

Egzersiz#regex.m4.l3.e3
Denemeler: 0Yükleniyor…

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

Düzenleyici yükleniyor…
İpucu göster

(?:\\.\\d{2}) kullanılsın mı? ondalık kısmı yakalamadan isteğe bağlı hale getirmek için.

3 denemeden sonra çözüm mevcut