我试图用C编写一个解析程序,该程序将从HTML文档中提取文本的某些片段。为此,我需要在文档中找到子字符串“ name”的每个实例:但是,C函数strstr仅找到子字符串的第一个实例。我找不到一个可以找到第一个实例之外的任何东西的函数,并且我已经考虑过在找到每个子串后删除它,以便strstr返回下一个子串。我无法使用这两种方法中的任何一种。
顺便说一句,我知道while循环将其限制为六个迭代,但是我只是在测试它以查看是否可以首先使函数正常工作。
while(entry_count < 6)
{
printf("test");
if((ptr = strstr(buffer, "\"name\":")) != NULL)
{
ptr += 8;
int i = 0;
while(*ptr != '\"')
{
company_name[i] = *ptr;
ptr++;
i++;
}
company_name[i] = '\n';
int j;
for(j = 0; company_name[j] != '\n'; j++)
printf("%c", company_name[j]);
printf("\n");
strtok(buffer, "\"name\":");
entry_count++;
}
}
只需将返回的指针加一个返回,strstr()
以找到下一个匹配项:
char *ptr = strstr(buffer, target);
while (ptr) {
/* ... do something with ptr ... */
ptr = strstr(ptr+1, target);
}
附言 尽管您当然可以做到这一点,但我还是建议您不妨考虑使用更合适的工具来完成这项工作:
C是一种非常低级的语言,尝试用它编写字符串解析代码很费力(尤其是如果您坚持从头开始编写所有代码,而不是使用现有的解析库或解析器生成器)并且容易出现错误(其中一些错误,例如缓冲区溢出,可能会造成安全漏洞)。有很多被更高级别的脚本语言(如Perl和Ruby,Python或甚至和JavaScript)的多少更适合这样的任务。
解析HTML时,您确实应该使用适当的HTML解析器(最好与良好的DOM构建器和查询工具结合使用)。这将使您能够基于文档的结构定位所需的数据,而不仅仅是匹配原始HTML源代码中的子字符串。真正的HTML解析器还将透明地处理诸如字符集转换和字符实体解码之类的问题。(是的,有是HTML解析器C,如浓汤和喧哗,所以即使你坚持坚持C.你可以和应该使用一个)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句