Что не так с моим C ++ регулярным выражением - PullRequest
2 голосов
/ 20 февраля 2011

Я пишу парсер robots.txt на С ++

 boost::regex exrp( "^User-agent:\s*(.*)");

                 boost:: match_results<string::const_iterator> what;

                  if(boost::regex_search( robots, what, exrp ) )

                  {

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


                      cout<< s;
                  }

это должно соответствовать useragent с именем *, но оно возвращает все данные

Ответы [ 2 ]

4 голосов
/ 20 февраля 2011

Вам нужна двойная обратная косая черта '\\', если вы не используете необработанные строки c ++ 0x.

2 голосов
/ 20 февраля 2011

Если вы хотите, чтобы оно совпадало только с User-agent: *, а не с (например) User-agent: webcrawler вам нужно

"^User-agent:\\s*\\*"

Символ * имеет особое значение, поэтому его необходимо экранировать с помощью \. (.*) в вашем коде соответствует нулю или более вхождений любого символа и фиксирует совпадение.

Редактировать: Вам также необходимо избежать обратной косой черты, на что указывают резиновые сапоги .

...