c regex tutorial regular expressions c with examples
Výukový program o regulárních výrazech C ++ nebo o regulárních výrazech vysvětluje Práce s regulárním výrazem v C ++ včetně funkce shody regexu, vyhledávání, nahrazování, ověřování vstupu a tokenizace:
Regulární výraz nebo regulární výrazy nebo regulární výrazy, jak se běžně nazývají, se používají k reprezentaci konkrétního vzoru řetězce nebo textu. Regulární výrazy se často používají k označení standardní textové syntaxe řetězce.
=> Navštivte zde a prohlédněte si sérii školení C ++ pro všechny.
Každý znak v regulárním výrazu má buď znak s doslovným významem, nebo „metaznak“, který má zvláštní význam.
Například , regulární výraz „a (a-z)“ může mít hodnoty „aa“, „ab“, „sekera“ atd. Zde má a doslovný význam a (a-z) označuje jakýkoli malý znak od a do z.
Výše uvedený příklad je samozřejmě nejjednodušší. Můžeme mít regulární výraz se složitějšími vzory.
Téměř všechny programovací jazyky poskytují podporu pro regulární výrazy. C ++ má přímou podporu pro regulární výrazy od C ++ 11 a dále. Kromě programovacích jazyků používá většina programů pro zpracování textu, jako jsou lexery, pokročilé textové editory atd., Regulární výrazy.
V tomto kurzu prozkoumáme podrobnosti regexů obecně i s ohledem na programování v C ++.
Co se naučíte:
Regulární výraz (regex) v C ++
Regulární výraz nebo regulární výraz je výraz obsahující posloupnost znaků, které definují konkrétní vyhledávací vzor, který lze použít v algoritmech prohledávání řetězců, k vyhledání nebo hledání / nahrazení algoritmů atd. K ověření vstupu se také používají regulární výrazy.
Většina programovacích jazyků poskytuje buď vestavěné možnosti pro regulární výraz nebo prostřednictvím knihoven. Od C ++ 11 a dále C ++ poskytuje podporu regulárního výrazu pomocí standardní knihovny prostřednictvím záhlaví.
Procesor regulárního výrazu, který se používá k analýze regulárního výrazu, jej přeloží do interní reprezentace, která se provede a porovná s řetězcem, který představuje hledaný text. C ++ 11 používá jako výchozí gramatiku pro regulární výraz gramatiku ECMAScript. ECMAScript je jednoduchý, přesto poskytuje výkonné funkce regulárního výrazu.
Podívejme se na některé vzory, které zadáme v regulárním výrazu, jako je Specifikace rozsahu, Opakované vzory atd.
Rozsah specifikace
Zadání rozsahu znaků nebo literálů je jedním z nejjednodušších kritérií použitých v regulárním výrazu.
Například, můžeme určit rozsah malých písmen od a do z takto:
(a-z)
To bude odpovídat přesně jednomu malému znaku.
Následující kritéria,
(A-Za-z0-9)
Výše uvedený výraz určuje rozsah obsahující jeden jediný velký znak, jeden malý znak a číslici od 0 do 9.
Závorky (()) ve výše uvedených výrazech mají zvláštní význam, tj. Slouží k určení rozsahu. Chcete-li jako součást výrazu zahrnout závorku, budete mu muset uniknout.
Takže následující výraz,
( (0-9)
Výše uvedený výraz označuje úvodní závorku a číslici v rozsahu 0 až 9 jako regulární výraz.
Ale všimněte si, že když programujeme v C ++, musíme použít následující únikovou sekvenci specifickou pro C ++ takto:
(\ (0-9)
Opakovaný vzor
Příklady rozsahu, které jsme zadali výše, odpovídají pouze jednomu znaku nebo literálu. Pokud chceme spojit více než jeden znak, obvykle zadáme „modifikátor výrazu“ spolu se vzorem, čímž se stane opakovaným vzorem.
Modifikátor výrazu může být „+“, který navrhuje párování výskytu vzoru jednou nebo vícekrát, nebo to může být „*“, které navrhuje shodu výskytu vzoru nula nebo vícekrát.
Například,následující výraz,
(a-z) + odpovídá řetězcům jako a, aaa, abcd, softwaretestinghelp atd. Všimněte si, že nikdy nebude odpovídat prázdnému řetězci.
Výraz,
(a-z) * bude odpovídat prázdnému řetězci nebo některému z výše uvedených řetězců.
Pokud chcete určit skupinu znaků tak, aby odpovídala jednou nebo vícekrát, můžete použít závorky následujícím způsobem:
(Xyz) +
Výše uvedený výraz bude odpovídat Xyz, XyzXyz a XyzXyzXyz atd.
C ++ regex Příklad
Zvažte regulární výraz, který odpovídá názvu souboru systému MS-DOS, jak je znázorněno níže.
char regex_filename() = “(a-zA-Z_) (a-zA-Z_0-9)*\.(a-zA-Z0-9)+”;
Výše uvedený regulární výraz lze interpretovat takto:
Porovnejte písmeno (malá a poté velká) nebo podtržítko. Poté přiřaďte nulu nebo více znaků, přičemž každý z nich může být písmeno nebo podtržítko nebo číslice. Poté porovnejte doslovnou tečku (.). Za tečkou vyhledejte jeden nebo více znaků, přičemž každý z nich může být písmeno nebo číslice označující příponu souboru.
Šablony funkcí používané v regexu v C ++
Pojďme nyní diskutovat o některých důležitých funkčních šablonách při programování regexu v C ++.
regex_match ()
Tato funkční šablona se používá ke shodě s daným vzorem. Tato funkce vrací true, pokud se daný výraz shoduje s řetězcem. V opačném případě funkce vrátí hodnotu false.
Následuje příklad programování v C ++, který ukazuje funkci regex_match.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout Výstup:

Ve výše uvedeném programu nejprve porovnáme řetězec „softwareTesting“ s regulárním výrazem „(„ (soft) (. *) “Pomocí funkce regex_match. Následně také předvedeme různé varianty regex_match tak, že mu předáme objekt řetězce, rozsah atd.
regex_search ()
Funkce regex_search () se používá k hledání vzoru v řetězci, který odpovídá regulárnímu výrazu.
Zvažte následující program C ++, který ukazuje použití regex_search ().
#include #include #include using namespace std; int main() { //string to be searched string mystr = 'She sells_sea shells in the sea shore'; // regex expression for pattern to be searched regex regexp('s(a-z_)+'); // flag type for determining the matching behavior (in this case on string objects) smatch m; // regex_search that searches pattern regexp in the string mystr regex_search(mystr, m, regexp); cout<<'String that matches the pattern:'< Výstup:

Pomocí objektu regulárního výrazu zadáme řetězec a poté regulární výraz. Tento řetězec a regex jsou předány funkci regex_search spolu s typem příznaku smatch. Funkce vyhledá první výskyt vzoru ve vstupním řetězci a vrátí odpovídající řetězec.
regex_replace ()
Funkce regex_replace () slouží k nahrazení shody vzoru s regulárním výrazem řetězcem.
Pojďme si pomocí programu C ++ předvést funkci regex_replace ().
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< Výstup:

Tady máme vstupní řetězec. Poskytujeme regulární výraz, který odpovídá řetězci začínajícímu na „p“. Poté nahradíme odpovídající slovo slovem „web“. Dále slovo „web“ nahradíme zpět na portál.
Ověření vstupu C ++
Diskutovali jsme o hlavních funkčních šablonách, které se používají pro porovnávání vzorů pomocí regexu. Je pozoruhodné, že hlavním účelem, který regulární výraz slouží, je ověření vstupu. Můžete zadat vstup zadaný ze standardního vstupního zařízení pomocí výrazu regulárního výrazu.
Zkontrolujte níže uvedený program a předveďte, jak můžete pomocí regulárního výrazu ověřit příchozí data.
#include #include #include using namespace std; int main() { string input; regex integer_expr('(\+|-)?((:digit:))+'); //As long as the input is correct ask for another number while(true) { cout<>input; if(!cin) break; //Exit when the user inputs q if(input=='q') break; if(regex_match(input,integer_expr)) cout<<'Input is an integer'< Výstup:

Tento program odpovídá vstupu zadanému uživatelem k ověření, zda se jedná o celé číslo. Výše uvedený výstup ukazuje, že když je zadáno celé číslo, dává příslušnou zprávu a při zadání jakýchkoli dalších údajů dává zprávu jako neplatný vstup.
Otázky a odpovědi k rozhovorům s html a css
Závěr
Regex se používá ve vyhledávačích k vyhledávání vzorů, vyhledávání a nahrazování dialogů aplikací, jako jsou textové procesory a textové editory. Regex se také používá v unixových nástrojích, jako je sed, awk, stejně jako lexikální analýza programu.
V tomto kurzu jsme viděli funkce, které se používají k porovnávání, vyhledávání a nahrazování vzorů. Pomocí těchto funkcí můžeme v podstatě vyvinout efektivní aplikaci, která implementuje požadovanou funkčnost pomocí regexu.
Regex umožňuje efektivně ověřovat vstup nebo hledat a nahrazovat řetězec opravným vzorem, což lze provést pomocí několika řádků kódu C ++.
Přečtěte si také => Výukový program pro regulární výrazy Java
=> Zkontrolujte VŠECHNY výukové programy pro C ++ zde.
Doporučené čtení
- Regulární výraz MongoDB $ regex s příkladem
- Výukový program Python DateTime s příklady
- Jak používat regulární výrazy Unixu
- Výukový program Java Array Length s příklady kódu
- Výukový program pro skriptování prostředí Unix s příklady
- Výukový program pro sdílení dat MongoDB s příkladem
- Výukový program pro vyhledání prvku selen pomocí textu s příklady
- Výukový program pro Unix Pipes: Pipes v programování Unixu