c regex tutorial regular expressions c with examples
Das Tutorial zu regulären C ++ - Ausdrücken oder Regex erklärt die Arbeitsweise von Regex in C ++, einschließlich der Funktionalität von Regex-Übereinstimmung, Suche, Ersetzen, Eingabevalidierung und Tokenisierung:
Reguläre Ausdrücke oder reguläre Ausdrücke oder reguläre Ausdrücke, wie sie üblicherweise genannt werden, werden verwendet, um ein bestimmtes Muster aus Zeichenfolgen oder Text darzustellen. Regexes werden häufig verwendet, um eine Standard-Textsyntax einer Zeichenfolge zu bezeichnen.
=> Besuchen Sie hier, um die C ++ - Schulungsserie für alle zu sehen.
Jedes Zeichen in einem regulären Ausdruck hat entweder ein Zeichen mit einer wörtlichen Bedeutung oder ein „Metazeichen“ mit einer besonderen Bedeutung.
Zum Beispiel kann ein regulärer Ausdruck 'a (a-z)' die Werte 'aa', 'ab', 'ax' usw. haben. Hier hat a eine wörtliche Bedeutung und (a-z) bezeichnet jedes Kleinbuchstabenzeichen von a bis z.
Das obige Beispiel ist natürlich das einfachste. Wir können einen regulären Ausdruck mit komplexeren Mustern haben.
Fast alle Programmiersprachen unterstützen reguläre Ausdrücke. C ++ unterstützt Regexe ab C ++ 11 direkt. Abgesehen von Programmiersprachen verwenden die meisten Textverarbeitungsprogramme wie Lexer, erweiterte Texteditoren usw. reguläre Ausdrücke.
In diesem Tutorial werden wir die Details von Regexes im Allgemeinen sowie in Bezug auf die C ++ - Programmierung untersuchen.
Was du lernen wirst:
- Regulärer Ausdruck (regulärer Ausdruck) In C ++
- In C ++ - Regex verwendete Funktionsvorlagen
- C ++ - Eingabevalidierung
- Fazit
Regulärer Ausdruck (regulärer Ausdruck) In C ++
Ein regulärer Ausdruck oder Regex ist ein Ausdruck, der eine Folge von Zeichen enthält, die ein bestimmtes Suchmuster definieren, das in Algorithmen zur Zeichenfolgensuche, zum Suchen oder Suchen / Ersetzen von Algorithmen usw. verwendet werden kann. Regexe werden auch zur Eingabevalidierung verwendet.
Die meisten Programmiersprachen bieten entweder integrierte Funktionen für Regex oder über Bibliotheken. Ab C ++ 11 bietet C ++ Regex-Unterstützung über die Standardbibliothek über den Header.
Ein Regex-Prozessor, der zum Parsen eines Regex verwendet wird, übersetzt ihn in eine interne Darstellung, die ausgeführt und mit einer Zeichenfolge abgeglichen wird, die den gesuchten Text darstellt. C ++ 11 verwendet die ECMAScript-Grammatik als Standardgrammatik für Regex. ECMAScript ist einfach, bietet jedoch leistungsstarke Regex-Funktionen.
Lassen Sie uns einige der Muster sehen, die wir in Regex spezifizieren, wie z. B. Bereichsspezifikation, wiederholte Muster usw.
Bereichsspezifikationen
Die Angabe eines Bereichs von Zeichen oder Literalen ist eines der einfachsten Kriterien, die in einem regulären Ausdruck verwendet werden.
Beispielsweise, Wir können einen Bereich von Kleinbuchstaben von a bis z wie folgt angeben:
(a-z)
Dies entspricht genau einem Kleinbuchstaben.
Die folgenden Kriterien:
(A-Za-z0-9)
Der obige Ausdruck gibt den Bereich an, der ein einzelnes Großbuchstaben, ein Kleinbuchstabenzeichen und eine Ziffer von 0 bis 9 enthält.
Die Klammern (()) in den obigen Ausdrücken haben eine spezielle Bedeutung, d. H. Sie werden verwendet, um den Bereich anzugeben. Wenn Sie eine Klammer als Teil eines Ausdrucks einfügen möchten, müssen Sie sie maskieren.
Also der folgende Ausdruck,
( (0-9)
Der obige Ausdruck gibt eine öffnende Klammer und eine Ziffer im Bereich von 0 bis 9 als Regex an.
Beachten Sie jedoch, dass wir beim Programmieren in C ++ die C ++ - spezifische Escape-Sequenz wie folgt verwenden müssen:
(\ (0-9)
Wiederholtes Muster
Die oben angegebenen Bereichsbeispiele stimmen nur mit einem Zeichen oder Literal überein. Wenn wir mehr als ein Zeichen abgleichen möchten, geben wir normalerweise den 'Ausdrucksmodifikator' zusammen mit dem Muster an, wodurch es zu einem wiederholten Muster wird.
Ein Ausdrucksmodifikator kann '+' sein, der vorschlägt, dass das Auftreten eines Musters ein- oder mehrmals übereinstimmt, oder er kann '*' sein, der vorschlägt, dass das Auftreten eines Musters null oder mehrmals übereinstimmt.
Zum Beispiel,der folgende Ausdruck,
(a-z) + stimmt mit den Zeichenfolgen wie a, aaa, abcd, softwaretestinghelp usw. überein. Beachten Sie, dass es niemals mit einer leeren Zeichenfolge übereinstimmt.
Der Ausdruck,
(a-z) * stimmt mit einer leeren Zeichenfolge oder einer der oben genannten Zeichenfolgen überein.
Wenn Sie eine Gruppe von Zeichen angeben möchten, die einmal oder mehrmals übereinstimmen, können Sie die Klammern wie folgt verwenden:
(Xyz) +
Der obige Ausdruck stimmt mit Xyz, XyzXyz und XyzXyzXyz usw. überein.
C ++ Regex Beispiel
Stellen Sie sich einen regulären Ausdruck vor, der mit einem MS-DOS-Dateinamen übereinstimmt (siehe unten).
char regex_filename() = “(a-zA-Z_) (a-zA-Z_0-9)*\.(a-zA-Z0-9)+”;
Der obige reguläre Ausdruck kann wie folgt interpretiert werden:
Ordnen Sie einen Buchstaben (Kleinbuchstaben und dann Großbuchstaben) oder einen Unterstrich zu. Stimmen Sie dann mit null oder mehr Zeichen überein, wobei jedes ein Buchstabe, ein Unterstrich oder eine Ziffer sein kann. Passen Sie dann einen wörtlichen Punkt (.) An. Stimmen Sie nach dem Punkt mit einem oder mehreren Zeichen überein, wobei jedes ein Buchstabe oder eine Ziffer sein kann, die die Dateierweiterung angeben.
In C ++ - Regex verwendete Funktionsvorlagen
Lassen Sie uns nun einige wichtige Funktionsvorlagen beim Programmieren von Regex in C ++ diskutieren.
regex_match ()
Diese Funktionsvorlage wird verwendet, um dem angegebenen Muster zu entsprechen. Diese Funktion gibt true zurück, wenn der angegebene Ausdruck mit der Zeichenfolge übereinstimmt. Andernfalls gibt die Funktion false zurück.
Es folgt ein C ++ - Programmierbeispiel, das die Funktion regex_match demonstriert.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout Ausgabe:
Im obigen Programm vergleichen wir zuerst den String 'softwareTesting' mit dem regulären Ausdruck '(' (soft) (. *) 'Mit der Funktion' regex_match '. Anschließend demonstrieren wir auch verschiedene Variationen von' regex_match ', indem wir ihm ein String-Objekt übergeben. Reichweite usw.
regex_search ()
Die Funktion regex_search () wird verwendet, um nach einem Muster in der Zeichenfolge zu suchen, das dem regulären Ausdruck entspricht.
Betrachten Sie das folgende C ++ - Programm, das die Verwendung von regex_search () zeigt.
#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:'< Ausgabe:
Wir geben eine Zeichenfolge und dann einen regulären Ausdruck mit dem Regex-Objekt an. Diese Zeichenfolge und der reguläre Ausdruck werden zusammen mit dem Smatch-Flag-Typ an die Funktion regex_search übergeben. Die Funktion sucht nach dem ersten Auftreten eines Musters in der Eingabezeichenfolge und gibt die übereinstimmende Zeichenfolge zurück.
regex_replace ()
Die Funktion regex_replace () wird verwendet, um die Musterübereinstimmung mit einem regulären Ausdruck durch eine Zeichenfolge zu ersetzen.
Verwenden Sie ein C ++ - Programm, um die Funktion regex_replace () zu demonstrieren.
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< Ausgabe:
Hier haben wir eine Eingabezeichenfolge. Wir stellen einen regulären Ausdruck bereit, der mit einer Zeichenfolge übereinstimmt, die mit 'p' beginnt. Dann ersetzen wir das übereinstimmende Wort durch das Wort 'Website'. Als Nächstes ersetzen wir das Wort 'Website' zurück zum Portal.
C ++ - Eingabevalidierung
Wir haben die wichtigsten Funktionsvorlagen besprochen, die für den Mustervergleich mit Regex verwendet werden. Es ist bemerkenswert, dass der Hauptzweck von Regex die Eingabevalidierung ist. Sie können die von einem Standardeingabegerät eingegebene Eingabe mithilfe des regulären Ausdrucks überprüfen.
Überprüfen Sie das folgende Programm, um zu demonstrieren, wie Sie den regulären Ausdruck verwenden können, um eingehende Daten zu validieren.
#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'< Ausgabe:
Dieses Programm stimmt mit der vom Benutzer eingegebenen Eingabe überein, um zu überprüfen, ob es sich um eine Ganzzahl handelt. Die obige Ausgabe zeigt, dass bei Eingabe einer Ganzzahl eine entsprechende Nachricht ausgegeben wird und bei Eingabe anderer Daten die Nachricht als ungültige Eingabe ausgegeben wird.
Fragen zum Interview auf der Basis von SQL Server-Szenarien
Fazit
Regex wird in Suchmaschinen verwendet, um Muster zu suchen, Dialoge von Anwendungen wie Textverarbeitungsprogrammen und Texteditoren zu suchen und zu ersetzen. Regex wird auch in UNIX-Dienstprogrammen wie sed, awk sowie in der lexikalischen Analyse des Programms verwendet.
In diesem Tutorial haben wir die Funktionen gesehen, die zum Abgleichen, Suchen und Ersetzen von Mustern verwendet werden. Mit diesen Funktionen können wir grundsätzlich eine effiziente Anwendung entwickeln, die die gewünschte Funktionalität mithilfe von Regex implementiert.
Mit Regex können Sie die Eingabe oder Suche effizient überprüfen und eine Zeichenfolge durch Patchen von Mustern ersetzen. Dies kann mit wenigen Zeilen C ++ - Code erfolgen.
Lesen Sie auch => Java-Tutorial für reguläre Ausdrücke
=> Überprüfen Sie ALLE C ++ - Tutorials hier.
Literatur-Empfehlungen
- MongoDB Regular Expression $ regex mit Beispiel
- Python DateTime Tutorial mit Beispielen
- Verwendung von regulären Unix-Ausdrücken
- Java Array Length Tutorial mit Codebeispielen
- Unix Shell Scripting Tutorial mit Beispielen
- MongoDB Sharding Tutorial mit Beispiel
- Selenium Find Element By Text Tutorial mit Beispielen
- Unix Pipes Tutorial: Pipes in der Unix-Programmierung