c ++有关正则表达式的麻烦,需要信息

时间:2016-03-23 03:14:38

标签: c++ regex

所以我想从.txt文件中查看是否有有效的代理并且我一直试图在没有正则表达式工作的情况下获得一些匹配,我决定尝试不同的方法,但我不知道似乎用c ++正则表达式理解任何东西,我不明白它是如此不同和大便, 我要么得到分段错误11,要么根本没有匹配。

regex r("[[:digit:]][[:digit:]][[:digit:]].[[:digit:]][[:digit:]][[:digit:]].[[:digit:]][[:digit:]][[:digit:]].[[:digit:]][[:digit:]][[:digit:]]:[[:digit:]][[:digit:]]");
        //regex r("[[:digit:]]{1,3}(.[[:digit:]]{1,3}){3}:[[:digit:]]{1,5}");

        smatch sm;
        if ( regex_search(text,sm,r) )
        {
            //we've got a match
        }

希望我能得到一些帮助

1 个答案:

答案 0 :(得分:1)

使用正则表达式,处理它们的最佳方法是从非常小的方式开始构建它们。也许从匹配一个数字开始,然后当你有匹配时,匹配一到三位数,然后匹配一到三位数后跟一个句号。

您应该收到警告,正则表达式在C ++标准库中相对较新,因此它可能无法在您的系统上运行。如果那对你来说是个问题,那么boost :: regex就可以了。

您可能还想使用文字原始字符串R“(\ d {1,3}。)”对您的正则表达式进行编码,以避免在反斜杠上加倍“\ d {1,3} \。”由于常规C字符串中的转义。从三个字符R“开始(并以两个结尾)”

R“(\ d {1,3}。)”可能会得到1-3位数字。