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