日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中的正则表达式使用

發布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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, reg_str, cflags);if (ret){ regerror(ret, &reg, ebuff, 256);fprintf(stderr, "%s\n", ebuff);goto end;} ret = regexec(&reg, test_str, 5, rm, 0); if (ret){ regerror(ret, &reg, ebuff, 256);fprintf(stderr, "%s\n", ebuff);goto end;}regerror(ret, &reg, 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(&reg);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语言中的正则表达式使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。