关于Linux C中正则表达式的问题。
在LINUX C下使用正则"Windows (?=95|98|NT|2000)"匹配"Windows 95"中的“Windows ”不成功,为什么?
代码如下:
- C/C++ code
#include<stdio.h>#include<string.h>#include<sys/types.h>#include<regex.h>/* 取子串的函数 */void substr (char *dest,char *str, unsigned start, unsigned end){ unsigned n = end - start; printf("\n%u \n",n); strncpy(dest, str + start, n); dest[n] = 0;}int Pattern(char *str,char *pattern,char *result){ int cflags=REG_EXTENDED,z; regex_t reg; regmatch_t pm[10]; const size_t nmatch=10; z = regcomp (®, pattern, cflags); printf("%d\n",z); if(z!=0) return z; z = regexec (®, str, nmatch, pm, 0); printf("%d\n",z); if(z!=0) return z; substr(result,str, pm[0].rm_so, pm[0].rm_eo); return z;}int main(int argc, char **argv){ char result[100]; Pattern("Windows 95","Windows (?=95|98|NT|2000)",result); printf("%s\n",result); return 0;}[解决办法]
你用的是POSIX正则表达式,与其他的正则表达式是有些差异的!
另外,result最好能初始化下,要不然,当找不到匹配项后,输出的结果可能会乱码!