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