这应该很简单,但我无法理解' +'的基本工作。在C.的regex.h库中。不确定出了什么问题。
粘贴不起作用的示例代码。我想找一个以B开头并以A结尾的字符串,可能会出现多次B,所以我想用B +
int main(int argc, const char * argv[])
{
regex_t regex;
int reti;
/* Compile regular expression */
reti = regcomp(®ex, "^B+A$", 0);
if( reti)
{
printf("Could not compile regex\n");
exit(1);
}
/* Execute regular expression */
reti = regexec(®ex, "BBBA", 0, NULL, 0);
if (!reti )
{
printf("Match\n");
}
else if( reti == REG_NOMATCH )
{
printf("No match\n");
}
else
{
printf("Regex match failed\n");
exit(1);
}
/* Free compiled regular expression if you want to use the regex_t again */
regfree(®ex);
return 0;
}
这找不到匹配,但我无法理解为什么。
使用^ BB * A $工作正常,但这不是我想要的。 因为我也想检查^ [BCD] + A $之类的东西,它应该与BBBA或CCCCA或DDDDA相匹配。使用^ [BCD] [BCD] * A $对我不起作用,因为它可以匹配不是所需匹配的BCCCA。 尝试在表达式中使用括号和括号,但它似乎没有帮助。
非常感谢快速帮助。
答案 0 :(得分:2)
默认情况下regcomp()
将模式编译为所谓的Basic Regular Expression;在这种正则表达式中,+
运算符不可用。您尝试使用的正则表达式语法称为Extended Regular Expression语法。为了让regcomp()
使用更广泛的语法,您需要将REG_EXTENDED
标记传递给它。
顺便说一下,这个评论:
因为我也想检查^ [BCD] + A $之类的东西,它应该与BBBA或CCCCA匹配或者 DDDDA。使用^ [BCD] [BCD] * A $对我不起作用,因为它可以匹配BCCCA而不是 想要的比赛
基于对量词+
和*
如何工作的误解。正则表达式^[BCD]+A$
和^[BCD][BCD]*A$
完全等效。