C 正则表达式中的点(正则表达式)
我使用slre()为c程序提供正则表达式库 我想用以下模式匹配IP地址: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
“^([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";