0

我在 C 中的 posix 正则表达式遇到问题。我只想检查一个字符串是否是字母数字的(非常​​简单),但是每当我尝试添加锚时我都会遇到问题。正则表达式是char pattern[20] = "^[a-zA-Z0-9]+$";,但是当我尝试将它与 char* str = "9abc1";我的程序匹配时,它告诉我它不匹配。我也尝试^[[:alnum:]]+$过类似的问题。我一直在修改我的正则表达式的语法,但是当我可以让它匹配时,添加连字符也会给我不正确的结果(不应该匹配的地方,特别是如果连字符在末尾)。显然我犯了一些基本的语法错误,但我似乎无法弄清楚。有什么建议吗?

4

1 回答 1

3

你在设置REG_EXTENDED吗?这对我来说很好:

#define _POSIX_C_SOURCE 200809L

#include <stdio.h>
#include <stdlib.h>
#include <regex.h>

int main(void) {
    regex_t rtype;

    int i = regcomp(&rtype, "^[a-zA-Z0-9]+$", REG_NOSUB | REG_EXTENDED);
    if ( i == 0 ) {
        printf("Regex compiled successfully.\n");
    } else {
        printf("Regex did not successfully compile.\n");
        return EXIT_FAILURE;
    }

    i = regexec(&rtype, "9abc1", 0, NULL, 0);
    if ( i == 0 ) {
        printf("Matched regex.\n");
    } else {
        char buffer[1000];
        regerror(i, &rtype, buffer, sizeof(buffer));
        printf("Regex error: %s\n", buffer);
    }

    return EXIT_SUCCESS;
}

和产量:

paul@local:~/src/c/scratch/$ ./regextest
Regex compiled successfully.
Matched regex.

POSIX 基本正则表达式语法中不存在量词,这+可能是让你失望的原因。

于 2013-09-17T03:47:07.150 回答