正则表达式中的点(正则表达式)

时间:2013-05-16 19:11:23

标签: c regex

我正在使用slre(https://code.google.com/p/slre/)为c程序提供正则表达式库。

我希望将IP地址与以下格式匹配:"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"

我得到以下编译错误:警告:未知的excape序列'\。' 我也试过'\\。' - >编译错误消失了,但仍然说它不匹配。

   if (!slre_compile(&slre, settings[i].regex)) {
       printf("Error compiling RE: %s\n", slre.err_str);
   } 
   else if (!slre_match(&slre, settings[i].value, strlen(settings[i].value), captures)) {
       printf("\nSetting '%s' does not match the regular expression!", settings[i].internName);
   }

settings [i] .regex是一个char *,带有我上面提到的正则表达式 设置[i] .value是一个字符* 我想要匹配的字符串是8.8.8.8

还有其他方法可以检查点吗?

3 个答案:

答案 0 :(得分:4)

尝试[.]

Dot在字符类中并不特殊。

答案 1 :(得分:3)

C编译器将反斜杠视为试图转义C中的字符,就像\n成为换行符一样。你需要使用双反斜杠:

\\.

C编译器会将其转换为单个反斜杠并将其传递给正则表达式库。

这是编译器警告的来源 - 如果在添加额外的反斜杠之后它仍然不匹配,那么你也有不同的问题。

根据http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx您的正则表达式与8.8.8.8匹配,因此问题不在于正则表达式本身。

答案 2 :(得分:0)

你的问题是关于C,但如果你可以用C ++ 11编译,你可以查看文字原始字符串

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm

std::string literal_string = R"literal string\. \n";