匹配字符串与正则表达式并返回其中的一部分

时间:2014-08-04 12:35:31

标签: c++ regex boost

我的第一个问题:)

我有一个正则表达式模式来查找我在日志中寻找的行,但我希望得到这一行的一部分。

模式:

.*127\.0\.0\.1\]\s.*REGISTER\srequest\ssip:.*\.com.*

行:

  

2014-07-31 15:42:09,110 810310621 [RMI TCP Connection(18)-127.0.0.1] DEBUG - 传入注册请求sip:example.com

我使用boost :: regex来查找该行并且它工作正常但是,我想获得域名或至少它的位置。我应该寻找什么功能?

1 个答案:

答案 0 :(得分:0)

以下是使用sregex_iterator的示例:

#include <boost\regex.hpp>
int main()
{
    using namespace boost;

    std::string example("2014 - 07 - 31 15:42 : 09, 110 810310621[RMI TCP Connection(18) - 127.0.0.1] DEBUG - Incoming REGISTER request sip : example.com");

    regex xpr("127\\.0\\.0\\.1\\].+REGISTER\\srequest\\ssip\\s:\\s(.+\\.com)");    
    for (sregex_iterator it(example.begin(), example.end(), xpr), end; it != end; ++it)
    {
        smatch m = *it;
        std::cout << "Found: \"" << m[1] << '\"' << std::endl;
    }
}

请注意,使用std :: regex / sregex_iterator是相同的。