Reguläre Ausdrücke in C
- Reguläre Ausdrücke in C
- 
          
            Erstellen Sie einen regulären Ausdruck mit der Methode regcomp()in C
- 
          
            Vergleich von Zeichenketten mit einem kompilierten regulären Ausdruck mit der Methode regexec()in C
 
Reguläre Ausdrücke in C werden zusammen mit einem Beispiel das Diskussionsthema in diesem Artikel sein.
Reguläre Ausdrücke in C
Reguläre Ausdrücke, die aus einer Zeichenkette bestehen, können verwendet werden, um Suchmuster zu entdecken. String-Matching und andere ähnliche Anwendungen machen davon ausgiebigen Gebrauch.
Sie sind ein standardisierter Ansatz zum Abgleichen von Mustersequenzen mit Zeichenfolgen. C, C++, Java und viele andere wichtige Programmiersprachen verwenden es.
Nachdem wir etwas über reguläre Ausdrücke gelernt haben, schauen wir uns einige POSIX-spezifische Bibliotheksmuster an.
- Die in Klammern eingeschlossenen Buchstaben oder Zahlen finden Sie ganz einfach mit [].
- [:number:]kann verwendet werden, um eine beliebige Nummer zu finden.
- [:word:]kann nach Buchstaben, Ziffern und Unterstrichen suchen.
- [:lower:]wird verwendet, um die Kleinbuchstaben des Alphabets zu finden.
Erstellen Sie einen regulären Ausdruck mit der Methode regcomp() in C
Die Regcomp()-Methode für reguläre Ausdrücke wird zum Kompilieren oder Erstellen von regulären Ausdrücken verwendet. Es erfordert die Regex, den Ausdruck und das Flag.
Der Ausdruck ist ein String-Typ, Regex ist ein Verweis auf einen Speicherbereich, in dem der Ausdruck abgeglichen und gespeichert wird, und das Flag wird verwendet, um die Art der Kompilierung zu identifizieren.
Es gibt den Wert 0 zurück, wenn die Kompilierung ohne Fehler abgeschlossen wurde. Und es wird Fehlercode ausgegeben, wenn der Ausdruck nicht erfolgreich kompiliert werden kann.
Syntax:
regcomp(®ex, expression, flag)
Beispiel:
- 
Erstellen Sie eine Variable vom Typ Regex und geben Sie ihr einen Namen, wie wir es getan habenr1.regex_t r1;
- 
Jetzt müssen Sie eine Variable erstellen, die das Ergebnis des Regex-Generierungsprozesses enthält, wie Sie unten sehen können:int regval;
- 
Generieren Sie eine Regex, indem Sie die Funktion aufrufen:regval = regcomp(&r1, "[:word:]", 0);
- 
Regular Expression compiled successfully.wird nach dem Kompilierungsprozess angezeigt.if (value == 0) { printf("Regular Expression compiled successfully."); }
- 
Andernfalls wird eine Ausnahme mit der MeldungAn Error Occurred.ausgelöst.else { printf("An Error Occurred."); }
Vollständiger Quellcode:
#include <regex.h>
#include <stdio.h>
int main() {
  regex_t r1;
  int regval;
  regval = regcomp(&r1, "[:word:]", 0);
  if (regval == 0) {
    printf("Regular Expression compiled successfully.");
  } else {
    printf("An Error Occurred.");
  }
  return 0;
}
Ausgabe:
Regular Expression compiled successfully.
Vergleich von Zeichenketten mit einem kompilierten regulären Ausdruck mit der Methode regexec() in C
Mit der Funktion regexec() ist es möglich, einen String mit einem Muster zu vergleichen. Es berücksichtigt einige Parameter: Der erste ist ein vorkompiliertes Muster, ein String, der das zu suchende Muster enthält, Informationen über den Ort von Übereinstimmungen und Flags, die eine Änderung im Verhalten von Übereinstimmungen beschreiben.
Syntax:
regexec(®ex, expression, 0, NULL, 0);
Wenn es eine Übereinstimmung gibt, wird der Wert 0 zurückgegeben. Und wenn es keine Übereinstimmung gibt, wird REG NOMATCH zurückgegeben.
Beispiel:
- 
Zunächst erstellen wir eine Funktion namensDisplayPattern, die das Ergebnis anzeigt. Wenn der Wert 0 ist, wirdPattern foundangezeigt; wenn es nicht gleich 0 ist, wird einfachPattern not foundangezeigt; Andernfalls wird eine Fehlermeldung mit der MeldungAn error occurred.angezeigt.void DisplayPattern(int val) { if (val == 0) { printf("Pattern found.\n"); } else if (val == REG_NOMATCH) { printf("Pattern not found.\n"); } else { printf("An error occurred.\n"); } }
- 
Jetzt erstellen wir die FunktionMain, in der wir eine Variable vom Typregex_tmit dem Namenr1erstellen.regex_t r1;
- 
Erstellen Sie drei Variablen für den Rückgabetyp namensdata1,data2,data3.int data1; int data2; int data3;
- 
Erstellen Sie dann eine RegEx und vergleichen Sie das Muster mit dem String inreg.data1 = regcomp(&r1, " I am a writing c language", 0); data1 = regexec(&r1, "Hi there its me Zeeshan", 0, NULL, 0);
- 
Fügen Sie wie unten gezeigt ein paar weitere RegEx hinzu und vergleichen Sie das Muster mit der Zeichenfolge inreg.data2 = regcomp(&r1, "I am a writing c language", 0); data2 = regexec(&r1, " Lets do coding", 0, NULL, 0); data3 = regcomp(&r1, "My Name is Zeeshan Khan", 0); data3 = regexec(&r1, " My Name is Zeeshan Khan", 0, NULL, 0);
- 
Zeigen Sie zuletzt Muster mit der zuvor erstellten FunktionDisplayPatternan.DisplayPattern(data1); DisplayPattern(data2); DisplayPattern(data3);
Vollständiger Quellcode:
#include <regex.h>
#include <stdio.h>
void DisplayPattern(int val) {
  if (val == 0) {
    printf("Pattern found.\n");
  } else if (val == REG_NOMATCH) {
    printf("Pattern not found.\n");
  } else {
    printf("An error occurred.\n");
  }
}
int main() {
  regex_t r1;
  int data1;
  int data2;
  int data3;
  data1 = regcomp(&r1, " I am a writing c language", 0);
  data1 = regexec(&r1, "Hi there its me Zeeshan", 0, NULL, 0);
  data2 = regcomp(&r1, "I am a writing c language", 0);
  data2 = regexec(&r1, " Lets do coding", 0, NULL, 0);
  data3 = regcomp(&r1, "My Name is Zeeshan Khan", 0);
  data3 = regexec(&r1, " My Name is Zeeshan Khan", 0, NULL, 0);
  DisplayPattern(data1);
  DisplayPattern(data2);
  DisplayPattern(data3);
  return 0;
}
Ausgabe:
Pattern not found.
Pattern not found.
Pattern found.
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn