ip地址正则表达式测试是否正确
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
只回答业务咨询
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
#include <sys/types.h> #include <regex.h> #include <stdlib.h> #include <stdio.h> #include <string.h> char *test; /* int regcomp(regex_t *preg, const char *regex, int cflags); int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size); void regfree(regex_t *preg); */ int main() { //编译的正则表达式 regex_t preg; //正则表达式字符串 // char *pattern = "([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})"; // char *pattern = "((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))))"; // char * pattern = "<a>(.+?)</a>"; // char *pattern = "(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}"; // char *pattern = "((2[0-4]\d|25[0-5]|1?\d?\d)\.){3}(2[0-4]\d|25[0-5]|1?\d?\d)"; // char *pattern = "2[0-4]\d|25[0-5]|1\d?\d?|[2-99]\.(2[0-4]\d|25[0-5]|0|1\d?\d?|[2-99]\.){2}2[0-4]\d|25[0-5]|0|1\d?\d?|[2-99]"; // char *pattern = "((25[0-5]|2[0-4]\d|((1\d{2})|[1-9]?\d))\.){3}|(25[0-5]|2[0-4]\d|((1\d{2})|[1-9]?\d))"; // char *pattern = "((25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2}).){3})(25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2}))"; // char *pattern = "((25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2})\.)((25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2})\.)((25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2})\.)(25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2}))"; char *pattern = "([0-9]{1,3}[.]){3}[0-9]{1,3}"; // char *pattern = "((25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2}).)((25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2}).)((25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2}).)(25[0-5]|(2[0-4][0-9])|([0-1][0-9]{1,2}))"; //标志使用正则表达式标准扩展并且不区分大小写REG_EXTENDED|REG_ICASE int cflags = REG_EXTENDED |REG_NEWLINE , regcomp_return = 0; //错误字符串缓冲 char errbuf[128]; //第一步:编译生成正则表达式 regcomp_return = regcomp(&preg, pattern, cflags); //如果成功返回0 if (regcomp_return != 0) { regerror(regcomp_return, &preg, errbuf, sizeof(errbuf)); fprintf(stderr, "%s:pattern '%s'", errbuf, pattern); printf("\n"); exit(1); } //第二步:使用生成的正则表达式匹配 //char *str = "<a>192.168.1.2</a>"; // char *str = "192.168.1.22"; char *str; // scanf("%s\n",str); printf("write ip:"); gets(str); /* typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t; rm_so 该字符串开始匹配的位置 rm_eo 该字符串在结尾匹配的位置 */ regmatch_t pm[1]; //最大匹配数填充到pm数组中 const size_t nmatch = 1; int z; z = regexec(&preg, str, nmatch, pm, 0); //如果z不等于0,那么 if (z != 0) { regerror(z, &preg, errbuf, sizeof(errbuf)); fprintf(stderr, "%s:pattern '%s'", errbuf, pattern); printf("\n"); exit(1); } // z = regexec(&preg, str, nmatch, pm, 0); int i = 0; //这里只会匹配第一个192.168.1.1要进行多次匹配需要将第一次匹配的结果摘除,进行循环匹配 //提示:使用strcpy函数来摘除已经匹配的字符串 // char *test; test = (char *)malloc(pm[0].rm_eo - pm[0].rm_so); for (i = pm[0].rm_so; i < pm[0].rm_eo; i++){ putchar(str[i]); // int len = pm[0].rm_eo - pm[0].rm_so; // memset(cmatch,'\0',sizeof(cmatch)); // memcpy(cmatch,str+pm[i].rm_so,len); // printf("%s\n",cmatch); } printf("\n"); memset(test, '\0', sizeof(test)); // memcpy(test, str+pm[0].rm_so,pm[0].rm_eo-pm[0].rm_so); memcpy(test,str, pm[0].rm_eo - pm[0].rm_so); printf("memcpy:%s\n",test); free(test); //释放正则表达式 regfree(&preg); printf("get %s\n",str); return 1; } |
学习日记,兼职软件设计,软件修改,毕业设计。
本文出自 学习日记,转载时请注明出处及相应链接。
本文永久链接: https://www.softwareace.cn/?p=337