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::smatchiç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ırstr(),position(),length(),prefix(),suffix()sregex_iteratorher 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
- regex Temelleri
- Yakalama Grupları
- Arama ve Değiştirme
- Performans Notları