读书人

关于Linux C中正则表达式的有关问题

发布时间: 2012-05-12 15:39:31 作者: rapoo

关于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 (&reg, pattern, cflags);    printf("%d\n",z);    if(z!=0) return z;    z = regexec (&reg, 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最好能初始化下,要不然,当找不到匹配项后,输出的结果可能会乱码!

读书人网 >C语言

热点推荐