37334 2015-05-29 13:51 采纳率: 45.5%
浏览 3799

c语言regex.h正则表达式判断url

在用c语言写爬虫(入坑),想用正则表达式来判断url结果发现复杂的判断(在其他正则表达式测试工具可以正常判断出来)没法判断出来,换成简单的测试了下(代码如下匹配是简单的)可以匹配出来,复杂的:图片说明

 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<string.h>
#include<regex.h>
#define MAX 1024
char* substr(const char*str, unsigned start, unsigned end)
{
  unsigned n = end - start;
  static char stbuf[256];
  strncpy(stbuf, str + start, n);
  stbuf[n+1] = '\0';
  return stbuf;
}
int main()
{
    int p;
    regex_t reg;
    regmatch_t pm[1];
    char *pattern="http://.*\"";
    FILE *fp;
    char buf[MAX];
    p=regcomp(&reg,pattern,REG_ICASE);
    if(p!=0){
    printf("error!");
    }
    if((fp=fopen("/home/wrj/3","r"))==NULL){
        printf("Fopen error!\n");
        exit(1);
    }
    while(fgets(buf,MAX,fp)){
        p=regexec(&reg,buf,1,pm,0);
        if(p==REG_NOMATCH)  continue;
        else{
            printf("%s\n",substr(buf,pm[0].rm_so,pm[0].rm_eo));
        }
    }

    fclose(fp);
    return 0;
}

这哪里有错呢?有注意到转义。。。。还是说这是regex.h的问题==

  • 写回答

4条回答 默认 最新

  • threenewbee 2015-05-29 14:00
    关注

    冒号和//都加上反斜杠。
    \:\/\/
    A-Z不是A-z

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器