chvanhui 发表于 2017-9-25 17:08:05

有关C++正则表达式

#include <regex>
#include <iostream>
#include <string>

bool IsIpV4Address(const std::string& strIp)
{
        //验证IP地址的模式,这里"\."中的"\"是转义字符,表示这是一个.
        const std::regex pattern("(\\d{1,3}){1}\.(\\d{1,3}){1}\.(\\d{1,3}){1}\.(\\d{1,3}){1}");
        //匹配验证
        return std::regex_match(strIp, pattern);
}

int main()
{
        std::string strIp1 = "13.34.34.4";//192.168.1.1
        std::string strIp2 = "192.168";

        std::cout << strIp1 << " : " << (IsIpV4Address(strIp1) ? "valid" : "invalid") << std::endl;
        std::cout << strIp2 << " : " << (IsIpV4Address(strIp2) ? "valid" : "invalid") << std::endl;
        system("pause");
        return 0;
}
"(\\d{1,3}){1}\.(\\d{1,3}){1}\.(\\d{1,3}){1}\.(\\d{1,3}){1}"
\\d是什么意思?
如果我只输入10.10为什么会匹配成功?不是最起码得有3个.吗?

付小聪 发表于 2017-9-25 19:59:03

我觉得这个问题应该是和正则表达式有关系,可能出了一些问题,我不太懂这个正则表达式。
下面的这个正则表达式是可以进行正确的处理的。可以试一下。具体关于正则的问题还是需要大神来回答。{:10_269:}
(|\\d|1\\d{2}|2\\d|25)(\\.(\\d|\\d|1\\d{2}|2\\d|25)){3}

zsy1998 发表于 2017-9-25 21:12:34

匹配.应该是\\.吧
页: [1]
查看完整版本: 有关C++正则表达式