Linux c 使用正則表達式

在用正則表達式進行電話號碼和郵箱的格式驗證的時候,發現網絡上並沒有很好的關於linux c 的正則表達式的材料。大多都是對函數進行了一下翻譯之類的,對使用則涉及的不全面。

下面是我寫的一個例子,其中比較關鍵的點我都添加了註釋,希望對你有幫助。

#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
/*
	一般的現在的linux發行版本都應該包含了這個頭文件的
*/

int main(int argc, char** argv)
{
	regex_t reg;
	//這是一個待填充的數據結構,它具有指針數據類型,指針的值和對應的空間都會在regcomp後被填充。
	regmatch_t pmatch[1];
	//這個是存放字符模式串解析結果的。該數組的第一個存放主串,後面存放子串
	const size_t nmatch = 1;
	//這是模式串的數目,本例子只是一個簡單的數字判定段,所以只是使用了一個元素
	
	const char* pattern = "^[0-9]{1,7}$";	
	/*
	我使用的模式串,一般的,推薦不要使用\d\w等此類的等價字符,不因爲別的,就因爲我在使用的時候,發現支持的不是很好,
	例如上述的匹配規則,如果換成等價字符應該是^\\d{1,7}$,可是實際,這個卻不能很好的工作,所以告誡不要胡亂使用等價串。這裏
	特別標記下有哪些是等價串:
  \d等價於[0-9]
  \w等價於[A-Za-z0-9]。

	儘量使用標準的寫法吧。
	另外提醒一下,js中用的非常的頻繁的模式串不是拿來就可以用的。至少,在js中\不用轉義,在c中明顯就要轉義吧!
	*/
	regcomp(&reg, pattern, REG_EXTENDED);
	//上述函數,第二個就是模式串,第三個是匹配標記值,這個不是很關鍵

	int status  = regexec(&reg, argv[1], nmatch, pmatch ,0);
	//regexec是實際執行正則驗證的函數,其中,第二個參數是待比較的字符串,它的返回值就是執行結果代碼error
	char error[100];
	size_t length = regerror(status, &reg, error,100);
	//注意了,上述函數的第一個參數就是regexec函數的返回值。
	printf("%s", error);
	regfree(&reg);
	//當然最後要釋放空間的

	return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章