我在使用 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/