0Pricing
C++ Academy · Ders

Yakalama Grupları

Eşleşen bölümleri çıkarın

Yakalama Grupları, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Yakalama Grubu Nedir?

Bir desendeki parantezler, eşleştirdikleri metin bölümünü hatırlayan bir yakalama grubu oluşturur; böylece bu bölümü daha sonra çıkarabilirsiniz.

  • (\\d+) bir rakam dizisini yakalar.
  • Sonuçlar bir std::smatch içine yerleştirilir.
#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\d+)");
    std::smatch m;
    std::string s = "order 42";
    if (std::regex_search(s, m, p)) {
        std::cout << "Captured: " << m[1] << '\n';
    }
    return 0;
}

smatch Sonucu

std::smatch eşleşme sonuçlarını saklar. [0] dizini eşleşmenin tamamını, [1], [2], ... dizinleri ise yakalama gruplarını sırasıyla içerir.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\w+)@(\\w+)");
    std::smatch m;
    std::string s = "user@host";
    if (std::regex_search(s, m, p)) {
        std::cout << "Whole: " << m[0] << '\n';
        std::cout << "User: " << m[1] << ", Host: " << m[2] << '\n';
    }
    return 0;
}

Birden Çok Grup

Örneğin bir tarihi yıl, ay ve gün olarak ayırmak gibi, aynı anda birden çok parçayı yakalayabilirsiniz.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\d{4})-(\\d{2})-(\\d{2})");
    std::smatch m;
    std::string s = "2026-05-30";
    if (std::regex_match(s, m, p)) {
        std::cout << "Y=" << m[1] << " M=" << m[2] << " D=" << m[3] << '\n';
    }
    return 0;
}

str(), position(), length()

Her grup, metni için str(), girdideki konumu için position() ve boyutu için length() işlevlerini sunar.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\d+)");
    std::smatch m;
    std::string s = "abc 789 xyz";
    if (std::regex_search(s, m, p)) {
        std::cout << "str: " << m[1].str() << '\n';
        std::cout << "pos: " << m.position(1) << '\n';
        std::cout << "len: " << m.length(1) << '\n';
    }
    return 0;
}

Ön Ek ve Son Ek

Eşleşme nesnesi ayrıca prefix() (eşleşmeden önceki metin) ve suffix() (eşleşmeden sonraki metin) işlevlerini de sunar.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::smatch m;
    std::string s = "left 55 right";
    if (std::regex_search(s, m, p)) {
        std::cout << "prefix: [" << m.prefix() << "]\n";
        std::cout << "suffix: [" << m.suffix() << "]\n";
    }
    return 0;
}

Yakalamayan Gruplar

Yakalama yapmadan gruplandırmak için (?:...) kullanın. Yalnızca niceleyiciler veya alternatifleme için gruplandırmaya ihtiyaç duyduğunuzda, bu yöntem numaralı gruplarınızın anlamlı kalmasını sağlar.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(?:Mr|Ms) (\\w+)");
    std::smatch m;
    std::string s = "Ms Smith";
    if (std::regex_search(s, m, p)) {
        std::cout << "Name: " << m[1] << '\n';
    }
    return 0;
}

Bir Grubun Eşleşip Eşleşmediğini Denetleme

İsteğe bağlı bir grup eşleşmeye katılmayabilir. Bir şey yakalayıp yakalamadığını görmek için alt eşleşme üzerindeki matched değerini test edin.

#include <iostream>
#include <regex>

int main() {
    std::regex p("file(\\.txt)?");
    std::smatch m;
    std::string s = "file";
    if (std::regex_match(s, m, p)) {
        std::cout << std::boolalpha << "ext matched: " << m[1].matched << '\n';
    }
    return 0;
}

Tüm Eşleşmeler Üzerinde Yineleme

std::sregex_iterator bir dizedeki her eşleşme üzerinde ilerler ve bu sırada her grubu size verir.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\d+)");
    std::string s = "a1 b22 c333";
    auto begin = std::sregex_iterator(s.begin(), s.end(), p);
    auto end = std::sregex_iterator();
    for (auto it = begin; it != end; ++it) {
        std::cout << (*it)[1] << '\n';
    }
    return 0;
}

Eşleşmeleri Sayma

Bir desenin kaç kez geçtiğini saymak için yineleyiciyi std::distance ile birleştirin.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::string s = "1 22 333 4444";
    auto begin = std::sregex_iterator(s.begin(), s.end(), p);
    auto end = std::sregex_iterator();
    std::cout << "Count: " << std::distance(begin, end) << '\n';
    return 0;
}

Anahtar-Değer Çiftlerini Çıkarma

Her eşleşmede iki grup kullanarak key=value belirteçleri gibi basit yapılandırılmış metinleri ayrıştırabilirsiniz.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\w+)=(\\w+)");
    std::string s = "a=1 b=2 c=3";
    auto begin = std::sregex_iterator(s.begin(), s.end(), p);
    auto end = std::sregex_iterator();
    for (auto it = begin; it != end; ++it) {
        std::cout << (*it)[1] << " -> " << (*it)[2] << '\n';
    }
    return 0;
}

Yakalananları Saklama

Verilerin eşleşme nesnesi ortadan kalktıktan sonra da geçerli kalması için yakalanan bir alt eşleşmeyi str() ile bir std::string içine kopyalayın.

#include <iostream>
#include <regex>
#include <string>

int main() {
    std::regex p("v(\\d+)");
    std::smatch m;
    std::string s = "version v7";
    std::string version;
    if (std::regex_search(s, m, p)) {
        version = m[1].str();
    }
    std::cout << "Stored: " << version << '\n';
    return 0;
}

Kısa Kontrol

Yakalama grubu dizinlerini ne kadar anladığınızı test edin.

Özet

Yakalama gruplarıyla verileri nasıl çıkaracağınızı öğrendiniz:

  • parantezler yakalar; (?:...) yakalama yapmadan gruplandırır
  • smatch[0] eşleşmenin tamamıdır, [1] ve sonrası gruplardır
  • str(), position(), length(), prefix(), suffix()
  • sregex_iterator her eşleşme üzerinde ilerler

Sonraki bölümde arama ve değiştirme kullanarak metni dönüştüreceksiniz.

Sıkça Sorulan Sorular

“Yakalama Grupları” dersi ücretsiz mi?

Evet — “Yakalama Grupları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Yakalama Grupları” dersinde ne öğreneceğim?

Eşleşen bölümleri çıkarın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Yakalama Grupları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. regex Temelleri
  2. Yakalama Grupları
  3. Arama ve Değiştirme
  4. Performans Notları
← C++ Academy Sayfasına Dön