本文所有的內容都來自網絡,加上一些個人的理解,不保證正確性,歡迎批評指正
說起正則表達式(Regular Expression),也許有的朋友天天都在使用,比如grep、vim、sed、awk,只是可能對這個名詞不大熟悉。正則表達式一般簡寫為regex或者regexp,甚至是RE。關于正則表達式的介紹,有很多的文章,用搜索引擎查找就可以找到很不錯的使用說明。但是在C/C++語言中如何去使用,相應的介紹比較缺乏。大多數C標準庫自帶regex,可以通過/usr/include/regex.h去看,或者man regex看使用說明。perl,php等語言更是提供了功能強大的正則表達式,最著名的C語言正則表達式庫為PCRE(Perl Compatible Regular Expression)。本文主要對regex和pcre的使用做一點入門介紹。
1、regex
regex的使用非常簡單,只要看一下示例代碼1就能明白(示例代碼是從“GNU C 規則表達式入門”這篇文章里摘取出來的,是否為原始出處就
不得而知了)。
CODE:#include <stdio.h>
#include <string.h>
#include <regex.h>
#define SUBSLEN 10 /* 匹配子串的數量 */
#define EBUFLEN 128 /* 錯誤消息buffer長度 */
#define BUFLEN 1024 /* 匹配到的字符串buffer長度 */
int main()
{
size_t len;
regex_t re; /* 存儲編譯好的正則表達式,正則表達式在使用之前要經過編譯 */
regmatch_t subs [SUBSLEN]; /* 存儲匹配到的字符串位置 */
char matched [BUFLEN]; /* 存儲匹配到的字符串 */
char errbuf [EBUFLEN]; /* 存儲錯誤消息 */
int err, i;
char src [] = "111 <title>Hello World</title> 222"; /* 源字符串 */
char pattern [] = "<title>(.*)</title>"; /* pattern字符串 */
printf("String : %s/n", src);
printf("Pattern: /"%s/"/n", pattern);
/* 編譯正則表達式 */
err = regcomp(&re, pattern, REG_EXTENDED);
if (err) {
len = regerror(err, &re, errbuf, sizeof(errbuf));
printf("error: regcomp: %s/n", errbuf);
return 1;
}
printf("Total has subexpression: %d/n", re.re_nsub);
新聞熱點
疑難解答
圖片精選