| (或者运算符不能用C语言编写正则表达式)

时间:2015-06-04 09:19:29

标签: c regex

Or运算符(|)不能用C语言正则表达式,它总是给输出匹配,如果我也提供错误的输入" 12"或" 123"或c显示为MATCH。在这种情况下我会请求帮助。

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


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

    /* Compile regular expression */
    reti = regcomp(&regex, "1 | 2c | 3c", REG_EXTENDED);
    if( reti ){ fprintf(stderr, "Could not compile regex\n"); return(1); }

    /* Execute regular expression */
    reti = regexec(&regex, "123", 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);
            return 1;
    }

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

    return 0;

}

1 个答案:

答案 0 :(得分:0)

您的正则表达式1 | 2c | 3c1中的I have 1 dollar匹配,但是根据您的评论,我认为您需要匹配整个字符串,而不仅仅是其中的一部分。为此,您需要使用仅在使用^标志时才起作用的锚$(字符串的开头)和REG_EXTENDED(字符串的结尾)。

当您使用替代品时,您需要重复锚点,或者在括号的帮助下设置一个组:

^1$|^2c$|^3c$

^(1|2c|3c)$

这些表达式will safely match whole strings,例如12c3c