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.
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?
- Okunabilirlik: Okuyucu, grubun yalnızca bunun için orada olduğunu hemen anlar. yapı, bir değer çıkarmak değil.
- Performans: Motorun grubun eşleşmesini saklaması gerekmez.
- 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
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.
İ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
'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).
İpucu göster
Önceki dersle aynı söz dizimi, ancak (ab)+ yerine (?:ab)+ ile.
3 denemeden sonra çözüm mevcut
Ek zorluk
Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.
İ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