,我們需要安裝使用正則表達式庫,這里我們選擇使用PCRE(Perl Compatible Regular Expressions)。PCRE是一種功能強大且廣泛支持的正則表達式庫,在C語言中具有良好的性能和易用性。
#include <stdio.h> #include <pcre.h> <br> int main() { const char *html = "<div>Hello, World!</div>"; const char *pattern = "<div>(.*?)</div>"; <br> pcre *re; const unsigned char *error; int error_offset; int ovector[30]; int rc; <br> re = pcre_compile(pattern, 0, &error, &error_offset, NULL); rc = pcre_exec(re, NULL, html, strlen(html), 0, 0, ovector, sizeof(ovector)/sizeof(ovector[0])); <br> if (rc >= 0) { for (int i = 0; i < rc; i++) { int start_offset = ovector[2*i]; int end_offset = ovector[2*i+1]; int length = end_offset - start_offset; <br> char *content = malloc(length + 1); strncpy(content, html + start_offset, length); content[length] = '\0'; <br> printf("Content: %s\n", content); free(content); } } <br> pcre_free(re); <br> return 0; }
在上面的代碼中,我們定義了一個HTML字符串,然后通過正則表達式“<div>(.*?)</div>”來匹配其中的<div>標簽。正則表達式中的“.*?”表示非貪婪匹配,即盡可能少的匹配字符,保證只匹配<div>標簽內的內容。我們使用pcre_exec函數來執行匹配,該函數將返回匹配到的次數。如果匹配成功,我們通過ovector數組找到每個匹配的起始位置和結束位置,并根據這些位置來提取<div>標簽內的內容。
除了上面的示例,我們還可以根據具體的需求來靈活使用正則表達式來匹配和提取<div>標簽的內容。例如,我們可以使用正則表達式來匹配帶有特定class屬性的<div>標簽:
const char *pattern = "<div class=\"(.*?)\">(.*?)</div>";
上面的代碼中,正則表達式“<div class=\"(.*?)\">(.*?)</div>”可以匹配class屬性和<div>標簽內的內容。我們可以通過ovector數組提取出class屬性的值和<div>標簽內的內容。
另外,我們還可以通過正則表達式來匹配多個<div>標簽,并逐個提取出其內容。例如:
const char *pattern = "<div>(.*?)</div>";
上面的代碼將匹配所有的<div>標簽,并通過ovector數組逐個提取出內容。這樣,我們就可以輕松地獲取到所有<div>標簽內的內容。
在實際項目中,正則匹配<div>標簽可以幫助我們快速地從HTML文檔中提取出需要的信息。無論是爬蟲程序還是數據分析工具,正則表達式的強大功能都可以提高我們的開發效率。
參考文獻:
- pcre - Perl-compatible regular expressions. (https://www.pcre.org/)
- Regular Expression Matching in the Wild. (https://swtch.com/~rsc/regexp/regexp1.html)