这是我第一次使用正则表达式。我需要的是与u<float>v<float>
匹配的东西,但是现在我将满足于匹配u<float>
并且浮动在开放单位间隔内的东西。 This整洁的网站让我看到以下表达式:
u0.\d+
“匹配你,零,一个点,一个或多个数字”
然后我想在C中尝试,如下所示:
#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
int main(int argc, char **argv)
{
regex_t regex;
char *regex_str = "u0.\\d+";
regcomp(®ex, regex_str, 0);
char *str = "u0.51";
int status = regexec(®ex, str, (size_t)0, NULL, 0);
printf("Status: %d\n", status);
return 0;
}
现在,根据man regexec
,regexec
在匹配时返回零。以上回报1.出了什么问题?谢谢。
答案 0 :(得分:1)
您需要转义.
,因为它是与任何一个字符匹配的正则表达式元字符。要转义它,请在其前面添加\
。但是\
是C字符串文字中的元字符,因此您必须转义 ,因此获取\\.
。
\d
是与Perl兼容的正则表达式惯用法,匹配单个数字。它在POSIX正则表达式中不存在 - 因此您必须使用[0-9]
。最后,+
不是基本正则表达式中的元字符 - 您必须使用REG_EXTENDED
。因此我们有
const char *regex_str = "u0\\.[0-9]+";
regcomp(®ex, regex_str, REG_EXTENDED);
答案 1 :(得分:0)
我不确定使用哪种功能,但根据我的经验,您需要使用扩展正则表达式来使加号工作。
\d
表示法也不是POSIX RegEx的一部分。它可能是PCRE(Perl兼容的RegEx)的一部分,因此它可能不适用regex.h
提供的内容。
试试这段代码:
chat *regex_str = "u0\\.[0-9]+"
regcomp(®ex, regex_str, REG_EXTENDED);