我不认为我明白如何只返回匹配的正则表达式。我有一个网页文件。我正在尝试获取页面中的所有链接。正则表达式工作正常。但是,如果我打印出来,它会打印出匹配发生的行。我只想显示比赛。我看到你可以做分组,所以我尝试了,并且为我的第二次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
我可以告诉你如何解决这个问题,但我想先解决其他问题。对用户来说没有意义的警告消息是一个问题。警告应该包含您需要的所有信息。从我的角度来看,它确实如此。我无法想象*不了解它。你有机会通过解释你的思维过程来帮助那些将来处于你的位置的人,现在,在混乱离开你之前,你成为我们中的一员... –