C 語言中的正規表示式
 
C 語言中的正規表示式將是本文討論的主題,並附有一個示例。
C 語言中的正規表示式
由字串組成的正規表示式可用於發現搜尋模式。字串匹配和其他類似應用程式廣泛使用它。
它們是一種將模式序列與字元序列匹配的標準化方法。C、C++、Java 和許多其他主要程式語言都使用它。
在瞭解了正規表示式之後,讓我們看看一些 POSIX 特定的庫模式。
- 使用 []可以輕鬆查詢括號中的字母或數字。
- [:number:]可用於定位任何號碼。
- [:word:]可以搜尋字母、數字和下劃線。
- [:lower:]用於定位字母表的小寫字母。
使用 C 語言中的 regcomp() 方法構造正規表示式
正規表示式 regcomp() 方法用於編譯或構造正規表示式。它需要正規表示式、表示式和標誌。
表示式是字串型別,正規表示式是對匹配和儲存表示式的記憶體區域的引用,標誌用於標識編譯的種類。
如果編譯完成且沒有錯誤,它將返回值 0。如果無法成功編譯表示式,它將輸出錯誤程式碼。
語法:
regcomp(®ex, expression, flag)
例子:
- 
建立一個正規表示式型別的變數,並像我們一樣給它命名r1。regex_t r1;
- 
現在,你需要構建一個變數來儲存正規表示式生成過程的結果,如下所示:int regval;
- 
通過呼叫函式生成正規表示式:regval = regcomp(&r1, "[:word:]", 0);
- 
Regular Expression compiled successfully.將在編譯完成後顯示。if (value == 0) { printf("Regular Expression compiled successfully."); }
- 
否則,它將引發異常,並顯示訊息An Error Occurred.。else { printf("An Error Occurred."); }
完整的原始碼:
#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;
}
輸出:
Regular Expression compiled successfully.
使用 C 語言中的 regexec() 方法將字串與已編譯的正規表示式進行比較
可以使用 regexec() 函式將字串與模式進行比較。它考慮了一些引數:第一個是已預編譯的模式、包含要查詢的模式的字串、有關匹配位置的資訊以及描述匹配行為變化的標誌。
語法:
regexec(®ex, expression, 0, NULL, 0);
如果有匹配,這將返回值 0。如果沒有匹配,它將返回 REG NOMATCH。
例子:
- 
首先,我們將建立一個名為DisplayPattern的函式來顯示結果。如果值為 0,則顯示Pattern found;如果它不等於 0,它將簡單地顯示Pattern not found.;否則,它將顯示錯誤提示,並顯示An error occurred.訊息。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"); } }
- 
現在,我們將建立Main函式,我們將在其中建立一個名為r1的regex_t型別變數。regex_t r1;
- 
為名為data1、data2、data3的返回型別建立三個變數。int data1; int data2; int data3;
- 
然後,建立一個正規表示式並將模式與reg中的字串進行比較。data1 = regcomp(&r1, " I am a writing c language", 0); data1 = regexec(&r1, "Hi there its me Zeeshan", 0, NULL, 0);
- 
如下所示再新增幾個正規表示式,並將模式與reg中的字串進行比較。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函式顯示模式。DisplayPattern(data1); DisplayPattern(data2); DisplayPattern(data3);
完整的原始碼:
#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;
}
輸出:
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