69,382
社区成员
发帖
与我相关
我的任务
分享
char pattern[] = "<a href.+?+\"";
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <stdlib.h>
#include <regex.h>
#define SUBSLEN 100
#define EBUFLEN 128 /* error buffer length */
#define BUFLEN 1024 /* matched buffer length */
#define FILE_PATH "/home/best/testUrl.html","w+"
int main(int argc, char **argv)
{
FILE *fp = NULL;
size_t len; /* store error message length */
regex_t re; /* store compilned regular expression */
regmatch_t subs[SUBSLEN]; /* store matched string position */
char matched[BUFLEN]; /* store matched strings */
char errbuf[EBUFLEN]; /* store error message */
int err, i;
//char string[] = "AAAAabaaababAbAbCdCd123123 11(123){12} ";
//char pattern[] = "(\\([0-9]+\\))(\\{[0-9]+\\}{1})$ ";
char string[100] = {0};
//char pattern[] ="([/w-]+/.)+[/w-]+.([^a-z])(/[/w-: ./?%&=]*)?|[a-zA-Z/-/.][/w-]+.([^a-z])(/[/w-: ./?%&=]*)?";
char pattern[] ="([http|https]://)?([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?";
printf("String : %s\n ", string);
printf("Pattern: \" %s \" \n", pattern);
if(NULL == (fp = fopen(FILE_PATH)))
{
printf("Open error\n");
return 0;
}
/* compile regular expression */
err = regcomp(&re, pattern, REG_EXTENDED);
if (err)
{
len = regerror(err, &re, errbuf, sizeof(errbuf));
fprintf(stderr, "error: regcomp: %s\n ", errbuf);
exit(1);
}
printf("Total has subexpression: %d\n ", re.re_nsub);
/* execute pattern match */
// regexec (regex_t *compiled, char *string, size_t nmatch, regmatch_t matchptr [], int eflags)
while(100 == fread(string,1,100,fp))
{
err = regexec(&re, string, (size_t) SUBSLEN, subs, 0);
if (err == REG_NOMATCH)
{
fprintf(stderr, "Sorry, no match ...\n ");
regfree(&re);
exit(0);
}
else if (err)
{
len = regerror(err, &re, errbuf, sizeof(errbuf));
fprintf(stderr, "error: regexec: %s\n ", errbuf);
exit(1);
}
/* if no REG_NOMATCH and no error, then pattern matched */
//printf("\nOK, has matched ...\n\n ");
for (i = 0; i <= re.re_nsub; i++) {
if (i == 0)
{
printf("begin: %d, end: %d, ", subs->rm_eo, subs->rm_eo);
} else {
printf("subexpression %d begin: %d, end: %d, ", i,subs->rm_so, subs->rm_eo);
}
len = subs->rm_eo - subs->rm_so;
memcpy(matched, string + subs->rm_so, len);
matched[len] = '\0';
printf("match: %s\n ", matched);
}
}
regfree(&re);
exit(0);
}