我正在尝试将regexec与 [A-Za-z0-9 _-] 模式一起使用,但似乎无法正常工作。例如“ AZaz09%” 包含非法字符'%',但令人惊讶的是,该匹配正常,并且找到的子字符串大小始终为(int)pm.rm_eo-( int)pm.rm_so = 1 安装了 6 。有人知道我在做什么错吗?
#include <stdio.h>
#include <regex.h>
int main()
{
char *string = "AZaz09%";
char *pattern = "[A-Za-z0-9_-]";
regex_t reg;
int match = REG_NOMATCH;
if (regcomp(®, pattern, 0) == 0)
{
regmatch_t pm;
match = regexec(®, string, 1, &pm, 0);
printf("%d\n",(int)pm.rm_eo - (int)pm.rm_so);
}
regfree(®);
if (match != REG_NOMATCH)
{
printf("OK");
}
else
{
printf("NOK");
}
return 0;
}
答案 0 :(得分:-1)
[A-Za-z0-9_-]
将匹配包含您列出的这些字符的至少一次出现的任何行。但这并不能防止其他字符的出现。
相反,请执行^[A-Za-z0-9_-]+$
^
表示行的开始,$
表示行的结束。因此,以上内容将匹配所有不包含除所列字符以外的其他任何字符的行,并且还包含这些字符中的至少一个。如果您还希望允许零长度的行,请将+
更改为*