Возможно, я задаю двойной вопрос, но я потратил пару часов на поиски этого безрезультатно!матч с повторением регулярных выражений без пробелов и угловых скобок
Я пытаюсь извлечь строку из некоторых URL-адресов SIP, проанализированных программой, над которой я работаю. Вот фрагмент кода. Я передаю в sipUrl
, и есть все права включает в себя и т.д.:
static const boost::regex sipRegExp ("(sip:\\[email protected](?=\\S)[^>]+);");
boost::cmatch result;
boost::match_results<string::const_iterator> results;
boost::match_flag_type flags = boost::format_perl;
string newSipUrl;
cout << sipUrl << endl;
bool toggle = boost::regex_search(sipUrl, result, sipRegExp, flags);
if (toggle) {
cout << result[1].str() << endl;
newSipUrl = result[1].str();
}
cout << "new url: " << newSipUrl << endl;
Я в основном пытаются извлечь sip:[email protected]
из строк, как "\"[email protected]\"<sip:[email protected]>;tag=fe310852"
или "\"bob\"<sip:[email protected]>;"
, однако, я не могу получить его, чтобы соответствовать! Он отлично работал, когда я не использовал lookahead, чтобы попытаться удалить последнюю угловую скобку, но с тех пор она не соответствует.
Публикуется перед тем, как выбежать из двери, поэтому может потребоваться дополнительная информация. Если кто-то может заметить что-то очевидное, то это будет большой помощью! И, пожалуйста, не стесняйтесь указывать мне ссылки, которые я, возможно, пропустил!
Классы символов могут работать с несколькими символами. Я бы сказал «sip: [-_ 0-9a-zA-Z] * @ [-_ 0-9a-zA-Z.] *« По крайней мере. Или, может быть, даже просто '' sip: \\ S * @ [^ \\ s>] * "'. –