linux c 語言 正規表示式

2021-08-15 03:13:28 字數 1121 閱讀 7157

關於正規表示式的基礎,請參考  

關於函式解釋,請參考 

自己寫了段小**,從url中提取處主機網域名稱和剩餘部分。

#include#include#include#includeint main(int argc, char **argv)	//傳入待匹配字串

regmatch_t pmatch[100]; //匹配結果

regex_t reg;

char * pattern = "(https?:(//)?)?([^/]*)(.*)"; //正規表示式

int i = 0;

char buf[100];

int res = regcomp(®, pattern, reg_extended | reg_newline); //將正規表示式編譯成適合regexec執行的形式

if(res)

return 0;

} regexec(®, argv[1], sizeof(pmatch)/sizeof(regmatch_t), pmatch, 0); //正則匹配

for(i = 0; i < 5 /*&& pmatch[i].rm_so != -1*/; i++)

regfree(®); //釋放正則編譯時申請的空間

}

重點解釋一下,regexec函式的返回值。

1. regexec返回第乙個串是輸入的、待匹配的串。後面是每個圓括號匹配到的串。(有些正規表示式可以用 ?: 關閉圓括號的捕獲功能,然而,regcomp會報錯為reg_badrpt(誤用萬用字元),如果您知道如何關閉圓括號的捕獲功能,還望不吝賜教)。返回的總字串數為圓括號數+1。

2. 返回的串用乙個結構體表示,分別式匹配到的串在原始串中,開始和結束的後乙個字元的位置。 如下:

typedef struct regmatch_t ;

3. 如果某個圓括號沒有匹配到字串,則 rm_so和rm_eo都為-1。-1並不代表整個匹配的結束,只是對應位置的圓括號沒有匹配到。 如果使用萬用字元,則未匹配到字串時 rm_so 等於 rm_eo。

示例:(可執行檔名為 t )

linux c 正規表示式

最近有這麼個需求,c搞搞正則,畢竟regular expression so強大 標準的c和c 都不支援正規表示式,但有一些函式庫可以輔助c c 程式設計師完成這一功能,其中最著名的當數philip hazel的perl compatible regular expression庫,許多linux發...

linux C正規表示式

在網上找到的乙個程式 c include include include 取子串的函式 static char substr const char str,unsigned start,unsigned end unsigned n end start static char stbuf 256 s...

linux c 正規表示式

標準的c和c 都不支援正規表示式,但有一些函式庫可以輔助c c 程式設計師完成這一功能,其中最著名的當數philip hazel的perl compatible regular expression庫,許多linux發行版本都帶有這個函式庫。編譯正規表示式 為了提高效率,在將乙個字串與正規表示式進行...