我不認爲我明白如何只返回匹配的正則表達式。我有一個網頁文件。我正在嘗試獲取頁面中的所有鏈接。正則表達式工作正常。但是,如果我打印出來,它會打印出匹配發生的行。我只想顯示比賽。我看到你可以做分組,所以我嘗試了,並且爲我的第二次printf調用返回一個int值。根據文件它是一個抵消。但抵消了什麼?它看起來並不準確,要麼是因爲當該行的字符32與正則表達式無關時它會說32。我只是看到第一場比賽就退出了。我哪裏錯了?regmatch_t我怎樣才能得到匹配?
char line[1000];
FILE *fp_original;
fp_original = fopen (file_original_page, "r");
regex_t re_links;
regmatch_t group[2];
regcomp (&re_links, "(href|src)=[\"|'][^\"']*[\"|']", REG_EXTENDED);
while (fgets (line, sizeof line, fp_original) != NULL) {
if (regexec (&re_links, line, 2, group, 0) == 0) {
printf ("%s", line);
printf ("%u\n", line[group[1].rm_so]);
exit (1);
}
}
fclose (fp_original);
當我與一個匹配的輸入運行程序,它打印'104',這是不是一個偏移,但*是*在發現該字符的偏移量! (這是匹配字符串的第一個字符的'href'的'h'的ASCII碼。)你是否通過打印'line [group [i] .rm_so]'而不是'group [i] .rm_so'? –
@ WumpusQ.Wumbley你說得對,'line [group [1] .rm_so]'確實返回ascii碼。但是當我嘗試使用'group [1] .rm_so'時,我得到一個警告:'警告:格式'%u'期望輸入'unsigned int',但參數2的類型爲'regoff_t''。任何想法爲什麼? – user983223
我可以告訴你如何解決這個問題,但我想先解決其他問題。對用戶來說沒有意義的警告消息是一個問題。警告應該包含您需要的所有信息。從我的角度來看,它確實如此。我無法想象*不瞭解它。你有機會通過解釋你的思維過程來幫助那些將來處於你的位置的人,現在,在混亂離開你之前,你成爲我們中的一員... –