Boost Regex Найти имя хоста / домена - PullRequest
0 голосов
/ 27 февраля 2010

Я очень плохо знаком с C ++ и Boost. Я пытаюсь получить имя хоста данного URL:

вот что у меня сейчас:

int main()
{
  string url = "http://www.amazon.com/gp/product/blabla";

 //Regular Expression from Javascript.
  boost::regex ex("/^((\w+):\/\/\/?)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#;\|]+)?([;\|])?([^\?#]+)?\??([^#]+)?#?(\w*)/");

  boost::regex_search(url, ex);
  // I want it to get "http://www.amazon.com/".
}

и я получаю массу ошибок: «escape-последовательность нераспознанного символа» Я взял это регулярное выражение из Javascript. Я не уверен, что смогу сделать это.

Какие типы регулярных выражений я могу использовать в Boost.regex, кроме Perl? Есть ли какой-либо конвертер регулярных выражений? (потому что я конвертирую тонны кода из Javascript в c ++, и у меня есть еще несколько регулярных выражений).

Кстати, эта функция у меня в Javascript:

parseHostname: function(url)
 {
    m = /^((\w+):\/\/\/?)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#;\|]+)?([;\|])?([^\?#]+)?\??([^#]+)?#?(\w*)/.exec(url) || [];
    return m[6];
},

Чтобы увидеть этот пример с PCRE и полным кодом - ссылка .

1 Ответ

1 голос
/ 27 февраля 2010

Поскольку обратная косая черта (\) является escape-символом в строковых константах C (& C ++), вам необходимо экранировать его.

т.е. заменить все экземпляры \ на \\

LOL. У меня была такая же проблема с этим постом! Все обратные слеши исчезли, потому что я забыл убежать от них.

Проверьте эту страницу , чтобы увидеть различные типы регулярных выражений, доступные в Boost. У него есть тип JavaScript, который просто отображается на нормальный, что подразумевает совместимость по умолчанию с регулярными выражениями JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...