2013-10-12 11 views
6

मैं विकल्प के लिए | का उपयोग कर रहा हूं लेकिन यह काम नहीं कर रहा है। क्या मुझसे कुछ गलत हो रही है?POSIX regex वैकल्पिक काम नहीं कर रहा

धन्यवाद!

निम्नलिखित कोड हमेशा No match वापसी:

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

int main(int argc, char *argv[]){ 
     regex_t regex; 
     int reti; 
     char msgbuf[100]; 

/* Compile regular expression */ 
     reti = regcomp(&regex, "ab(c|d)", 0); 
     if(reti){ fprintf(stderr, "Could not compile regex\n"); exit(1); } 

/* Execute regular expression */ 
     reti = regexec(&regex, "abd", 0, NULL, 0); 
     if(!reti){ 
       puts("Match"); 
     } 
     else if(reti == REG_NOMATCH){ 
       puts("No match"); 
     } 
     else{ 
       regerror(reti, &regex, msgbuf, sizeof(msgbuf)); 
       fprintf(stderr, "Regex match failed: %s\n", msgbuf); 
       exit(1); 
     } 

/* Free compiled regular expression if you want to use the regex_t again */ 
    regfree(&regex); 

     return 0; 

} 
+0

तुम कोशिश क्या '\ |'? – JimR

+0

बस कोशिश की, – ethanjyx

+0

काम नहीं कर रहा है कुछ regex libs '|', '+' आदि के लिए भागना चाहते हैं ... – JimR

उत्तर

7

POSIX manual कहते हैं, आप विस्तारित नियमित अभिव्यक्ति की अनुमति देने के झंडे तर्क सेट करना होगा।

REG_EXTENDED 
      Use POSIX Extended Regular Expression syntax when interpreting 
      regex. If not set, POSIX Basic Regular Expression syntax is 
      used. 
+0

+1: स्पॉट ऑन; यह ठीक है समस्या है। –

संबंधित मुद्दे