Kaappaavat ryhmät
Poimi täsmätyt osat
Kaappaavat ryhmät on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on kaappausryhmä?
Kuvion sulkeet muodostavat kaappausryhmän, joka muistaa täsmäämänsä tekstiosan, jotta voitte poimia sen myöhemmin.
(\\d+)kaappaa numerosarjan.- Tulokset tallennetaan
std::smatch-olioon.
#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-tulos
std::smatch tallentaa täsmäytyksen tulokset. Indeksi [0] sisältää koko täsmäytyksen, ja [1], [2] ja niin edelleen sisältävät kaappausryhmät järjestyksessä.
#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;
}Useita ryhmiä
Voitte kaapata useita osia kerralla, esimerkiksi jakaa päivämäärän vuodeksi, kuukaudeksi ja päiväksi.
#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()
Kullakin ryhmällä on str()-funktio sen tekstille, position()-funktio sen siirtymälle ja length()-funktio sen koolle syötteessä.
#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;
}Etuliite ja jälkiliite
Täsmäytysobjekti tarjoaa myös prefix()-funktion, joka palauttaa täsmäytystä edeltävän tekstin, sekä suffix()-funktion, joka palauttaa sitä seuraavan tekstin.
#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;
}Kaappaamattomat ryhmät
Käyttäkää (?:...)-rakennetta ryhmittelyyn ilman kaappausta. Näin numeroidut ryhmät pysyvät selkeinä, kun tarvitsette ryhmittelyä vain kvanttoreita tai vaihtoehtoja varten.
#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;
}Ryhmän täsmäytyksen tarkistaminen
Valinnainen ryhmä ei ehkä osallistu täsmäytykseen. Tarkistakaa alitäsmäytyksen matched-arvo nähdäksenne, kaappasiko se mitään.
#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;
}Kaikkien täsmäytysten läpikäynti
std::sregex_iterator käy läpi merkkijonon jokaisen täsmäytyksen ja antaa samalla käyttöön kunkin ryhmän.
#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;
}Täsmäytysten laskeminen
Yhdistäkää iteraattori std::distance-funktion kanssa laskeaksenne, kuinka monta kertaa kuvio esiintyy.
#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;
}Avain–arvo-parien poimiminen
Kaksi ryhmää täsmäytystä kohti mahdollistavat yksinkertaisen rakenteisen tekstin jäsentämisen, kuten key=value-tunnisteiden käsittelyn.
#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;
}Kaappausten tallentaminen
Kopioikaa kaapattu alitäsmäytys std::string-muuttujaan str()-funktion avulla, jotta tiedot säilyvät täsmäytysobjektin tuhoutumisen jälkeen.
#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;
}Pikatarkistus
Testatkaa, miten hyvin ymmärrätte kaappausryhmien indeksoinnin.
Kertaus
Opitte poimimaan tietoja kaappausryhmien avulla:
- sulkeet kaappaavat;
(?:...)ryhmittelee ilman kaappausta smatch[0]sisältää koko täsmäytyksen ja[1]ja sitä suuremmat indeksit ryhmätstr(),position(),length(),prefix()jasuffix()sregex_iteratorkäy läpi jokaisen täsmäytyksen
Seuraavaksi muunnatte tekstiä haun ja korvauksen avulla.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Kaappaavat ryhmät” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Kaappaavat ryhmät”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Kaappaavat ryhmät”?
Poimi täsmätyt osat Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Kaappaavat ryhmät”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- regex-perusteet
- Kaappaavat ryhmät
- Haku ja korvaus
- Suorituskykyhuomiot