本文所有的內(nèi)容都來自網(wǎng)絡(luò),加上一些個人的理解,不保證正確性,歡迎批評指正
說起正則表達(dá)式(Regular Expression),也許有的朋友天天都在使用,比如grep、vim、sed、awk,只是可能對這個名詞不大熟悉。正則表達(dá)式一般簡寫為regex或者regexp,甚至是RE。關(guān)于正則表達(dá)式的介紹,有很多的文章,用搜索引擎查找就可以找到很不錯的使用說明。但是在C/C++語言中如何去使用,相應(yīng)的介紹比較缺乏。大多數(shù)C標(biāo)準(zhǔn)庫自帶regex,可以通過/usr/include/regex.h去看,或者man regex看使用說明。perl,php等語言更是提供了功能強(qiáng)大的正則表達(dá)式,最著名的C語言正則表達(dá)式庫為PCRE(Perl Compatible Regular Expression)。本文主要對regex和pcre的使用做一點(diǎn)入門介紹。
1、regex
regex的使用非常簡單,只要看一下示例代碼1就能明白(示例代碼是從“GNU C 規(guī)則表達(dá)式入門”這篇文章里摘取出來的,是否為原始出處就
不得而知了)。
CODE:#include <stdio.h>
#include <string.h>
#include <regex.h>
#define SUBSLEN 10 /* 匹配子串的數(shù)量 */
#define EBUFLEN 128 /* 錯誤消息buffer長度 */
#define BUFLEN 1024 /* 匹配到的字符串buffer長度 */
int main()
{
size_t len;
regex_t re; /* 存儲編譯好的正則表達(dá)式,正則表達(dá)式在使用之前要經(jīng)過編譯 */
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);
/* 編譯正則表達(dá)式 */
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);
新聞熱點(diǎn)
疑難解答
圖片精選