Arama ve Değiştirme
Metni regex ile dönüştürün
Arama ve Değiştirme, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. 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.
regex_replace
std::regex_replace, bir desenin her eşleşmesinin değiştirme dizesiyle değiştirildiği yeni bir dize döndürür.
- Özgün dize değiştirilmeden kalır.
- Varsayılan olarak tüm eşleşmeler değiştirilir.
#include <iostream>
#include <regex>
int main() {
std::regex p("cat");
std::string s = "the cat and the cat";
std::cout << std::regex_replace(s, p, "dog") << '\n';
return 0;
}Rakamları Değiştirme
Desenler, bir dizedeki her rakamı bir yer tutucuyla maskelemek gibi toplu düzenlemeleri kolaylaştırır.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d");
std::string s = "PIN 1234";
std::cout << std::regex_replace(s, p, "*") << '\n';
return 0;
}Değiştirmede Geri Başvurular
Metni yeniden düzenlemek için yakalanan grupları değiştirme dizesine eklemek üzere $1, $2, ... kullanın.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\w+) (\\w+)");
std::string s = "John Smith";
std::cout << std::regex_replace(s, p, "$2 $1") << '\n';
return 0;
}Eşleşmenin Tamamı: $&
$& belirteci eşleşmenin tamamını ifade eder; bulunan metni ek karakterlerle çevrelemek için kullanışlıdır.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::string s = "item 42";
std::cout << std::regex_replace(s, p, "[$&]") << '\n';
return 0;
}Yalnızca İlkini Değiştirme
Her oluşum yerine yalnızca ilk eşleşmeyi değiştirmek için std::regex_constants::format_first_only geçirin.
#include <iostream>
#include <regex>
int main() {
std::regex p("o");
std::string s = "foo boo";
auto out = std::regex_replace(s, p, "0", std::regex_constants::format_first_only);
std::cout << out << '\n';
return 0;
}Boşlukları Normalleştirme
Yaygın bir temizleme görevi, art arda gelen boşluk karakterlerini tek bir boşluğa indirmektir.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\s+");
std::string s = "too many spaces";
std::cout << std::regex_replace(s, p, " ") << '\n';
return 0;
}Eşleşmeleri Kaldırma
Boş bir dizeyle değiştirmek, her eşleşmeyi etkili bir şekilde siler; bu yöntem istenmeyen karakterleri ayıklamak için kullanışlıdır.
#include <iostream>
#include <regex>
int main() {
std::regex p("[^a-zA-Z]");
std::string s = "a1b2c3";
std::cout << std::regex_replace(s, p, "") << '\n';
return 0;
}Tarihleri Yeniden Biçimlendirme
Biçimi değiştirmek için bir tarihin bölümlerini yakalayın ve değiştirme metninde yeniden sıralayın.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d{4})-(\\d{2})-(\\d{2})");
std::string s = "2026-05-30";
std::cout << std::regex_replace(s, p, "$3/$2/$1") << '\n';
return 0;
}Eşleşmeyen Metni Koruma
Varsayılan olarak eşleşmeyen metin olduğu gibi kopyalanır. Yalnızca değiştirmeleri çıktılamak ve geri kalanını atmak için format_no_copy kullanın.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::string s = "a1b2c3";
auto out = std::regex_replace(s, p, "$&", std::regex_constants::format_no_copy);
std::cout << out << '\n';
return 0;
}Sözcükleri Sansürleme
Bir sözcük listesini tek seferde sansürlemek için alternatiflemeyi değiştirmeyle birleştirin.
#include <iostream>
#include <regex>
int main() {
std::regex p("bad|evil");
std::string s = "a bad and evil idea";
std::cout << std::regex_replace(s, p, "***") << '\n';
return 0;
}Sonucu Adım Adım Oluşturma
regex_replace bir dize döndürdüğü için, bir çağrının sonucunu sonraki çağrıya aktararak dönüşümleri zincirleyebilirsiniz.
#include <iostream>
#include <regex>
int main() {
std::string s = " Hello, World ";
s = std::regex_replace(s, std::regex("\\s+"), " ");
s = std::regex_replace(s, std::regex("^ | $"), "");
std::cout << "[" << s << "]\n";
return 0;
}Kısa Kontrol
Değiştirme söz dizimini ne kadar anladığınızı test edin.
Özet
regex_replace ile metni nasıl dönüştüreceğinizi öğrendiniz:
- varsayılan olarak tüm eşleşmeleri değiştirir ve yeni bir dize döndürür
$1,$2,$&yakalanan grupları ve eşleşmenin tamamını eklerformat_first_onlyveformat_no_copygibi bayraklar- karmaşık temizlemeler oluşturmak için çağrıları zincirleme
Sonraki bölümde regex'i verimli kullanmayı ve yaygın performans tuzaklarından kaçınmayı öğreneceksiniz.
Sıkça Sorulan Sorular
“Arama ve Değiştirme” dersi ücretsiz mi?
Evet — “Arama ve Değiştirme” 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.
“Arama ve Değiştirme” dersinde ne öğreneceğim?
Metni regex ile dönüştürü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 3. dersidir.
“Arama ve Değiştirme” 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ı