regex-perusteet
Täsmäytä tekstin kuvioita
regex-perusteet on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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ä <regex> on?
Otsaketiedoston <regex> avulla voitte verrata tekstiä säännöllisiin lausekkeisiin, jotka kuvaavat merkkijonojoukkoja. Muodostatte kuvion ja testaatte tai haette tekstiä sen avulla.
std::regexsisältää käännetyn kuvion.- Täsmäytysfunktiot ilmoittavat, vastaako teksti kuviota.
#include <iostream>
#include <regex>
int main() {
std::regex pattern("hello");
std::cout << std::boolalpha << std::regex_match("hello", pattern) << '\n';
return 0;
}regex_match vs regex_search
regex_match edellyttää, että koko merkkijono täsmää. regex_search onnistuu, jos kuvio esiintyy merkkijonossa missä tahansa.
#include <iostream>
#include <regex>
int main() {
std::regex p("cat");
std::string s = "the cat sat";
std::cout << std::boolalpha;
std::cout << "match: " << std::regex_match(s, p) << '\n';
std::cout << "search: " << std::regex_search(s, p) << '\n';
return 0;
}Merkkiluokat
Hakasulkeet määrittävät sallittujen merkkien joukon. [aeiou] täsmää mihin tahansa yksittäiseen vokaaliin, ja alueet, kuten [a-z], täsmäävät pieniin kirjaimiin.
#include <iostream>
#include <regex>
int main() {
std::regex p("[a-z]+");
std::cout << std::boolalpha << std::regex_match("hello", p) << '\n';
std::cout << std::regex_match("Hello", p) << '\n';
return 0;
}Kvanttorit
Kvanttorit hallitsevat toistoa: * tarkoittaa nollaa tai useampaa, + yhtä tai useampaa, ? valinnaista esiintymää ja {n,m} lukumäärän vaihteluväliä.
#include <iostream>
#include <regex>
int main() {
std::regex p("a+b");
std::cout << std::boolalpha;
std::cout << std::regex_match("aaab", p) << '\n';
std::cout << std::regex_match("b", p) << '\n';
return 0;
}Ennalta määritetyt luokat
Lyhenneluokat vähentävät kirjoitettavaa: \\d täsmää numeroon, \\w sanamerkkiin ja \\s tyhjään merkkiin. C++-lähdekoodissa kenoviiva kirjoitetaan kahdesti.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::cout << std::boolalpha;
std::cout << std::regex_match("12345", p) << '\n';
std::cout << std::regex_match("12a45", p) << '\n';
return 0;
}Ankkurit
Ankkurit kiinnittävät täsmäytyksen tiettyyn kohtaan: ^ merkitsee tekstin alkua ja $ loppua. Ne täsmäävät kohtiin, eivät merkkeihin.
#include <iostream>
#include <regex>
int main() {
std::regex p("^abc$");
std::cout << std::boolalpha;
std::cout << std::regex_search("abc", p) << '\n';
std::cout << std::regex_search("xabc", p) << '\n';
return 0;
}Vaihtoehdot
Pystyviiva | tarkoittaa ”tai”. Kuvio cat|dog täsmää kumpaan tahansa sanaan. Rajatkaa sen vaikutusaluetta ryhmittelemällä sulkeilla.
#include <iostream>
#include <regex>
int main() {
std::regex p("cat|dog");
std::cout << std::boolalpha;
std::cout << std::regex_match("cat", p) << '\n';
std::cout << std::regex_match("dog", p) << '\n';
std::cout << std::regex_match("fish", p) << '\n';
return 0;
}Erikoismerkkien käsittely
Merkeillä, kuten ., * ja (, on erityinen merkitys. Lisätkää niiden eteen kenoviiva, jotta ne täsmäävät kirjaimellisina.
#include <iostream>
#include <regex>
int main() {
std::regex p("3\\.14");
std::cout << std::boolalpha;
std::cout << std::regex_match("3.14", p) << '\n';
std::cout << std::regex_match("3x14", p) << '\n';
return 0;
}Kirjainkoosta riippumaton täsmäytys
Välittäkää kuvion luonnin yhteydessä lippu, kuten std::regex::icase, jotta kirjainkokoa ei huomioida täsmäytyksessä.
#include <iostream>
#include <regex>
int main() {
std::regex p("hello", std::regex::icase);
std::cout << std::boolalpha;
std::cout << std::regex_match("HELLO", p) << '\n';
std::cout << std::regex_match("Hello", p) << '\n';
return 0;
}Yksinkertainen kelvollisuuden tarkistus
Kuviot sopivat hyvin syötteen muodon tarkistamiseen, esimerkiksi sen varmistamiseen, että merkkijono näyttää perusluvulta, jonka etumerkki voi olla valinnainen.
#include <iostream>
#include <regex>
bool isNumber(const std::string& s) {
static const std::regex p("-?\\d+");
return std::regex_match(s, p);
}
int main() {
std::cout << std::boolalpha;
std::cout << isNumber("-42") << '\n';
std::cout << isNumber("4a2") << '\n';
return 0;
}Useita täsmäytyksiä
Yhdistämällä merkkiluokkia ja kvanttoreita voitte tarkistaa monipuolisempia muotoja, kuten kirjainjonon, jota seuraavat numeromerkit.
#include <iostream>
#include <regex>
int main() {
std::regex p("[A-Za-z]+\\d+");
std::cout << std::boolalpha;
std::cout << std::regex_match("abc123", p) << '\n';
std::cout << std::regex_match("123abc", p) << '\n';
return 0;
}Pikatarkistus
Testatkaa, miten hyvin ymmärrätte täsmäytyksen ja haun eron.
Kertaus
Opitte <regex>-kirjaston perusteet:
regex_matchkoko merkkijonon täsmäytyksiin jaregex_searchosamerkkijonojen täsmäytyksiin- merkkiluokat, kvanttorit, ankkurit ja vaihtoehdot
- ennalta määritetyt luokat, kuten
\\d, sekä erikoismerkkien käsittely - liput, kuten
icase
Seuraavaksi poimitte täsmäytyksen tiettyjä osia kaappausryhmien 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 ”regex-perusteet” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “regex-perusteet”. 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 ”regex-perusteet”?
Täsmäytä tekstin kuvioita 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 1/4.
Kuinka kauan ”regex-perusteet”-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