这个boost c ++正则表达式代码有什么问题?

时间:2010-09-20 12:17:46

标签: c++ regex string-concatenation string-literals boost-regex

包括

#include <fstream>
#include <string>
#include<string>
#include<boost/algorithm/string.hpp>
#include<boost/regex.hpp>
#include <boost/algorithm/string/trim.hpp>
using namespace std;
using namespace boost;


int main() {
    string robotsfile="User-Agent: *"
            "Disallow: /";

    regex exrp( "^Disallow:(.*)$");

            match_results<string::const_iterator> what;

            if( regex_search( robotsfile, what, exrp ) )

            {

                string s( what[1].first, what[1].second );


                cout<< s;
            }

    return 0;
}

我需要从/获取不允许的路径Disallow: /我的正则表达式有什么问题?

1 个答案:

答案 0 :(得分:5)

string robotsfile = "User-Agent: *"
    "Disallow: /";

上面的字符串文字合并为“User-Agent:* Disallow:/”,并且没有您想到的换行符。由于您的正则表达式声明该字符串必须以“Disallow”字开头,因此它不匹配。逻辑上正确的代码是这样的:

string robotsfile = "User-Agent: *\n"
    "Disallow: /";

string robotsfile = "User-Agent: *\nDisallow: /";