C语言中的正则表达式使用
生活随笔
收集整理的這篇文章主要介紹了
C语言中的正则表达式使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一、概述
二、Demo
三、Ref
?
記錄下C中的正則表達式及其使用Demo。
一、概述
在c語言中,用regcomp、regexec和regfree:
- 編譯正則表達式,regcomp;
- 匹配正則表達式,regexec;
- 釋放正則表達式,regfree;
函數原型如下:
/* 函數說明:Regcomp將正則表達式字符串regex編譯成regex_t的形式,后續regexec以此進行搜索。 參數說明:Preg:一個regex_t結構體指針。Regex:正則表達式字符串。Cflags:是下邊四個值或者是他們的或(|)運算。REG_EXTENDED:使用POSIX擴展正則表達式語法解釋的正則表達式。如果沒有設置,基本POSIX正則表達式語法。REG_ICASE:忽略字母的大小寫。REG_NOSUB:不存儲匹配的結果。REG_NEWLINE:對換行符進行“特殊照顧”,后邊詳細說明。 返回值:0:表示成功編譯;非0:表示編譯失敗,用regerror查看失敗信息 */ int regcomp(regex_t *preg, const char *regex, int cflags);/* 函數說明: Regexec用來匹配正則文本。 參數說明:Preg:由regcomp編譯好的regex_t結構體指針,String:要進行正則匹配的字符串。Nmatch:regmatch_t結構體數組的大小Pmatch:regmatch_t結構體數組。用來保存匹配結果的子串位置。regmatch_t結構體定義如下typedef struct {regoff_t rm_so;regoff_t rm_eo;} regmatch_t;rm_so,它的值如果不為-1,表示匹配的最大子串在字符串中的起始偏移量,rm_eo,表示匹配的最大字串在字符串的結束偏移量。Eflags: REG_NOTBOL和REG_NOTEOL為兩個值之一或二者的或(|)運算,稍后會介紹。 返回值:0:表示成功編譯;非0:表示編譯失敗,用regerror查看失敗信息 */ int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);/* 函數說明:用來釋放regcomp編譯好的內置變量。 參數說明:Preg:由regcomp編譯好的regex_t結構體指針。 */ void regfree(regex_t *preg);二、Demo
#define _GNU_SOURCE #include <string.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <regex.h>int main (void) {int i;char ebuff[256];int ret;int cflags;regex_t reg;regmatch_t rm[5];char *part_str = NULL;cflags = REG_EXTENDED | REG_ICASE;char *test_str = "POST /v1/api/key/123abc/info?accessToken=cook123";char *reg_str = "^(.*)\\s/v1/api/key/(.*)/info.*accessToken=(.*)";ret = regcomp(®, reg_str, cflags);if (ret){ regerror(ret, ®, ebuff, 256);fprintf(stderr, "%s\n", ebuff);goto end;} ret = regexec(®, test_str, 5, rm, 0); if (ret){ regerror(ret, ®, ebuff, 256);fprintf(stderr, "%s\n", ebuff);goto end;}regerror(ret, ®, ebuff, 256);fprintf(stderr, "result is:\n%s\n\n", ebuff);for (i=0; i<5; i++){if (rm[i].rm_so > -1){part_str = strndup(test_str+rm[i].rm_so, rm[i].rm_eo-rm[i].rm_so);fprintf(stderr, "%s<=\n", part_str);free(part_str);part_str = NULL;}}end:regfree(®);return 0; }輸出如下:
result is: SuccessPOST /v1/api/key/123abc/info?accessToken=cook123<= POST<= 123abc<= cook123<=三、Ref
-
https://segmentfault.com/a/1190000019807078
-
https://www.jianshu.com/p/9cda6b29a12b
?
總結
以上是生活随笔為你收集整理的C语言中的正则表达式使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多版本node的安装与切换详细操作
- 下一篇: 度量体系建立与COSMIC方法应用36问