📄 regexp.c
字号:
#include<regex.h>#include<stdio.h>#include<string.h>int verif_motif(const char * streg, char * strg){ regex_t regexp; //initialisation d'une valeur régulière if (regcomp(®exp, streg,REG_EXTENDED)!=0) //compilation en valeur régulière {printf("");} else {size_t n=regexp.re_nsub; //recuperation du nombre de motifs reconnus regmatch_t *pmatch=malloc(sizeof(*pmatch)*n); //initialisation du tableau contenant les motifs if (regexec(®exp,strg,n,pmatch,REG_NOTBOL)==0) { return 1; //si la recherche réussit, alors on retourne 1 } else {return 0;} // sinon on retourne 0 }}void deb_motif(const char * streg, char * strg, int deb, char * motif){ regex_t regexp; //initialisation d'une valeur régulière if (regcomp(®exp, streg, REG_EXTENDED)!=0) //compilation en valeur régulière {printf("");} else { size_t n=regexp.re_nsub; //récuperation du nombre de motifs reconnus regmatch_t * pmatch=malloc(n*sizeof(*pmatch)); //initialisation du tableau contenant les motifs if (regexec(®exp,strg,n+1,pmatch,0)==0) { deb=pmatch[1].rm_so; //récupération de l'emplacement du début du motif reconnu if (n>0){ int deb_sou=pmatch[1].rm_so; int fin=pmatch[1].rm_eo;//récupération de l'emplacement de la fin du motif reconnu int taille=fin-(deb_sou); strncpy (motif, &strg[deb_sou],taille); //copie du motif reconnu dans une chaine motif[taille]='\0';} //Ajout du caractère de fin de chaine } else {motif[0]='\0';} }}char * rempl_motif(char * a_remplacer, char * substitut, char * streg,char * retour){ regex_t regexp; //initialisation d'une valeur régulière if (regcomp(®exp, streg, REG_EXTENDED)!=0) //compilation en valeur régulière { printf("la compilation de l'expression régulière a échoué\n"); } else { size_t n=regexp.re_nsub; //recuperation du nombre de motifs reconnus regmatch_t * pmatch=malloc(n*sizeof(*pmatch)); //tableau contenant les motifs if (regexec(®exp,a_remplacer,n+1,pmatch,0)==0) { int deb, i, j; retour[0]='\0'; if(n>0) //Si la chaine contient un sous-motif, on le récupère { deb_motif(streg,a_remplacer,deb,retour); } int debut=pmatch[0].rm_so; int longu_subst1=strlen(substitut); int longu_motif=strlen(retour); int cpt=0;/*Remplacement dans la chaine de substitution des $ par le sous-motifs*/ for (i=0;i<longu_subst1;i++) { if (substitut[i]=='$') { if (longu_motif<=1) {substitut[i]=retour[0];} else { char tmp[longu_subst1+longu_motif]; for (j=0;j<i;j++) {tmp[j]=substitut[j];} for (j=0;j<longu_motif;j++) {tmp[i+j]=retour[j];} for(j=0;j<((longu_subst1-1)+longu_motif);j++) {tmp[i+longu_motif+j]=substitut[i+1+j];} strcpy(substitut,tmp); } } } int longu_subst=strlen(substitut); int longu_remp=strlen(a_remplacer); char * remp_long=malloc((debut+longu_subst+1)*sizeof(char)); for (i=0;i<=debut;i++) {remp_long[i]=a_remplacer[i];} for (i=0;i<longu_subst;i++) {remp_long[debut+i]=substitut[i];} remp_long[debut+longu_subst]='\0'; strcpy(retour,remp_long); free(remp_long); return retour; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -