Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 正则表达式中的点(正则表达式)_C_Regex - Fatal编程技术网

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

C 正则表达式中的点(正则表达式),c,regex,C,Regex,我使用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]12425[0-5])” 我得到以下编译错误:警告:未知的excape序列“\” 我也用“\\.”试过了-->编译错误消失了,但它仍然说它不匹配 if (!slre_compile(&slre, settings[i].reg

我使用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]12425[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]。值为字符* 我试图匹配的字符串是8.8.8.8

有没有其他方法检查点?

试试
[。]


点在字符类中并不特殊。

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

\\.
C编译器将把它转换为一个反斜杠,并将其传递给正则表达式库

这就是编译器警告的来源——如果在添加额外的反斜杠后仍然不匹配,那么您也会遇到不同的问题


根据你的正则表达式确实匹配
8.8.8.8
,所以问题不在于正则表达式本身。

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


在字符类中放入特殊字符(在您的例子中,
[.]
)被认为是最佳做法。
\.
在正则表达式中是检查点的正确方法,
\.
是在C字符串中表示点的正确方法。请提供尝试匹配的代码。该代码匹配IPv4地址,而不是URL。需要两个反斜杠,一个用于转义C字符串文本中的以下反斜杠,另一个用于转义正则表达式引擎的
。请给我们看不匹配的字符串。好的,我添加了你们要求的信息,提前谢谢!
std::string literal_string = R"literal string\. \n";