Что не так с этим кодом регулярного выражения C ++ boost? - PullRequest
0 голосов
/ 20 сентября 2010

включает

#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 Ответ

5 голосов
/ 20 сентября 2010
string robotsfile = "User-Agent: *"
    "Disallow: /";

Приведенные выше строковые литералы объединены в "User-Agent: * Disallow: /", и новой строки, как вы могли подумать, нет. Поскольку ваше регулярное выражение гласит, что строка должна начинаться со слова «Disallow», она не совпадает. Логически правильный код будет выглядеть примерно так:

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

или

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