用C语言从txt文本中筛选以.com结尾的字符串,并打印到目标文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <regex.h>


int chk_line(char* line){
    int status;
    int cflags = REG_EXTENDED;
    regmatch_t pmatch[1];  //pmatch.so  pmatch.eo 
    const size_t nmatch = 1;
    regex_t reg;
    const char* pattern = "\\w*\\W*\\w*.com*\\w*";
    int rcp,ref,len,i = 0;


    rcp = regcomp(&reg,pattern,cflags); //编译正则表达式
    if(rcp){
        printf("regcomp failed..\n");
        return -1;
    }
    status = regexec(&reg,line,nmatch,pmatch,0);//执行匹配


    if(status){ //未匹配成功,则返回
        return -2;
    }
    else{
        len = pmatch[0].rm_eo -pmatch[0].rm_so + 1; //匹配的字符串长度
        for(i = pmatch[0].rm_so;i < pmatch[0].rm_eo;++i){ //打印字符串
            putchar(line[i]);
        }
        putchar('\n');
    }
    regfree(&reg);//清空regex_t结构体。
    return 0;
}
int main(int argc,char* argv[]){
    FILE* fr;
    char line[1024];
    int ck,len1 = 0;
    stdout = freopen("out.txt", "w", stdout); //将标准输出重定向到out.txt
    
    if(argc != 2){
        printf("usage: %s + filename\n",argv[0]);
    }


    fr = fopen(argv[1],"r");
    if(!fr){
        printf("open file failed\n"); 
        return -1;
    }
    
    memset(line,0,sizeof(line));
    while(fgets(line,sizeof(line),fr)){ //按行读取文件
        len1 = strlen(line)+1;
        char buf[len1];
        ck = chk_line(line);//chk_line failed close fr
        memset(line,0,sizeof(line));
    }
    fclose(fr);
    fclose(stdout); //关闭重定向
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42125216/article/details/80688210
今日推荐