使用正则表达式在C中设置正确的正则表达式的问题
我想匹配所有以一组字符开头的字符串a-z,然后正好匹配一个:和另一组字符a-z。
例如,该字符串"an:example"将是正确的匹配。
另一个例子,"another:ex:ample"需要不匹配。
我试图这样设置它,但它匹配所有内容,即使我将错误的字符串作为输入:(
所以我的正则表达式是"[a-z]:[a-z]"但它将字符串评估"1an:example"为匹配:/
我怎样才能正确地做到这一点?
#include <stdio.h>
#include <regex.h>
int main() {
regex_t regex;
int retis;
char* str = "1an:example";
retis = regcomp(®ex, "[a-z]:[a-z]", 0);
retis = regexec(®ex, str, 0, NULL, 0);
if(!retis) {
puts("Match");
}
else if(retis == REG_NOMATCH) {
puts("No match");
}
regfree(®ex);
return 0;
}
回答
你需要
retis = regcomp(®ex, "^[a-z]+:[a-z]+$", REG_EXTENDED);
请参阅C 在线演示。
那是:
^(字符串开头)和$(字符串结尾)是需要正则表达式匹配整个字符串的锚点[a-z]+匹配一个或多个小写字母REG_EXTENDED允许扩展正则表达式语法,例如regex.h需要启用$锚点。