2012-10-20 21 views
1

工作,爲什麼\ W模式所無法比擬的,很多模式不能正常工作,例如:\ S油腔滑調的正則表達式也不會在C

我的操作系統是蘋果

我想也許失去了一些東西;

該代碼只匹配char'w',不要sam。

感謝你的幫助

// 
// main.c 
// test 
// 
// Created by SamPeng on 12-9-22. 
// Copyright (c) 2012年 SamPeng. All rights reserved. 
// 

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

int main(int argc, const char * argv[]) 
{ 
    int status,i; 
    int cflags = REG_EXTENDED; 
    regmatch_t pmatch[1]; 
    const size_t nmatch=1; 
    regex_t reg; 
    const char *pattern="\\w"; 
    char *buf = "[email protected]"; 

    regcomp(&reg, pattern, cflags); 
    status = regexec(&reg, buf, nmatch, pmatch, 0); 

    if(status == REG_NOMATCH) 
     printf("No Match \n"); 
    else if(status == 0){ 
     printf("Match:\n"); 
     for (i=pmatch[0].rm_so; i<pmatch[0].rm_eo; ++i) { 
      putchar(buf[i]); 
     } 
     printf("\n"); 
    } 
    regfree(&reg); 
    return 0; 
} 

補充: 是的,我知道這個作品是POSIX基地REG,如何改變呢?我不想使用強大的正則表達式

回答

1

Glib正則表達式不支持普通字符類的普通\速記。它支持POSIX字符類(例如[[:space:]]),所以你可以使用它,如果你願意。否則,您可以明確使用不帶簡寫字符的字符集(例如[ \t\n])。

在正則表達式手冊頁中有關於此的非常好的文檔。

+0

謝謝,如果我不想使用支持常見的正則表達式,有一些建議嗎? – SamPeng

+0

這兩個答案都讓glibc的正則表達式與glib正則表達式混淆。這些是不同的圖書館。前者是「標準」正則表達式,因此不支持Perl的\ w,\ s等。glib中的正則表達式確實支持Perl語法。 –