關於正規表示式的基礎,請參考
關於函式解釋,請參考
自己寫了段小**,從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發行版本都帶有這個函式庫。編譯正規表示式 為了提高效率,在將乙個字串與正規表示式進行...