2 u012618837 u012618837 于 2015.05.29 21:51 提问

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的问题==

3个回答

caozhy
caozhy   Ds   Rxr 2015.05.29 22:00

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

u012618837
u012618837 懂了,warning而已,但是也还是没能输出结果==
接近 3 年之前 回复
caozhy
caozhy 回复北风依旧吹: 你放在C++里面要双斜杠
接近 3 年之前 回复
u012618837
u012618837 卡了,一下子回复那么多==
接近 3 年之前 回复
u012618837
u012618837 不行啊,这样会报错warning: unknown escape sequence: '\:' [enabled by default]|warning: unknown escape sequence: '\/' [enabled by default]|warning: unknown escape sequence: '\/' [enabled by default]|
接近 3 年之前 回复
u012618837
u012618837 不行啊,这样会报错warning: unknown escape sequence: '\:' [enabled by default]|warning: unknown escape sequence: '\/' [enabled by default]|warning: unknown escape sequence: '\/' [enabled by default]|
接近 3 年之前 回复
u012618837
u012618837 不行啊,这样会报错warning: unknown escape sequence: '\:' [enabled by default]|warning: unknown escape sequence: '\/' [enabled by default]|warning: unknown escape sequence: '\/' [enabled by default]|
接近 3 年之前 回复
jifukui
jifukui   2015.05.30 10:10

^是一个毛点对应于行起始。。。

u012618837
u012618837 ?不是吧,怎么和我学的正则表达式说的不一样,而且这个表达式可以在正则表达式工具中成功解析出网站
接近 3 年之前 回复
jifukui
jifukui   2015.05.30 10:11

同时想问一下你的正则表达式的库文件是从那弄得???

u012618837
u012618837 linux下支持正则,有regex.h头文件
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!