c - C 中的 Posix 正则表达式错误

标签 c regex posix

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

最佳答案

您是否正在设置 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 基本正则表达式语法中不存在,这可能会让您失望。

关于c - C 中的 Posix 正则表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840664/

相关文章:

c - 对于我的C作业,我不明白使用重定向来测试程序是什么意思?

javascript - 使用 JavaScript Regex 删除 '&&&' 之后的字符串的最后一部分

regex - 更改匹配行中的单词

用于在 Notepad++ 中删除具有相同 ID 的行的正则表达式

c - 尽管再次使用 O_CREAT,但以相同名称重新打开时 shm_open() 失败

linux - clock_nanosleep 不返回 -1/set errno EINTR - LINUX

c - 内核如何处理对共享映射的并发访问?

python - 解析 C++ 预处理器 #if 语句

c++ - 可以查询 OpenAL 设备它喜欢的频率和格式吗?

c - C中的L值与R值