2013-08-13 3 views
0

Возможно, я задаю двойной вопрос, но я потратил пару часов на поиски этого безрезультатно!матч с повторением регулярных выражений без пробелов и угловых скобок

Я пытаюсь извлечь строку из некоторых 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, чтобы попытаться удалить последнюю угловую скобку, но с тех пор она не соответствует.

Публикуется перед тем, как выбежать из двери, поэтому может потребоваться дополнительная информация. Если кто-то может заметить что-то очевидное, то это будет большой помощью! И, пожалуйста, не стесняйтесь указывать мне ссылки, которые я, возможно, пропустил!

ответ

1

Вы пропустили > перед точкой с запятой:

"(sip:\\[email protected](?=\\S)[^>]+)>;" 

Хотя на самом деле вы, вероятно, не нужна точка с запятой вообще. Кое-что вроде ответа Скотта должно быть достаточно.

2

Вы пробовали что-нибудь попроще, например, как регулярное выражение против:

`sip:[a-zA-Z]*@[0-9a-zA-Z.]*` 

работ на терминале, но не пробовал через импульс еще. Если вы начинаете с чего-то простого, то добавьте по частям, чтобы сделать его более конкретным, тогда будет легче отслеживать, какая часть регулярного выражения не работает.

+1

Классы символов могут работать с несколькими символами. Я бы сказал «sip: [-_ 0-9a-zA-Z] * @ [-_ 0-9a-zA-Z.] *« По крайней мере. Или, может быть, даже просто '' sip: \\ S * @ [^ \\ s>] * "'. –

0

я в конечном итоге происходит с модификацией комментария @David Книпе в - выигрышная регулярное выражение было:

sip:\\[email protected][^\\s>;]+ 

Какие матчи с или без угловых скобок, до толстой кишки. Оба предоставленных ответа действительно работали, но возможность удалять взгляды была довольно приятной. Я также пошел с модификаторами +, чтобы приложить усилия, чтобы найти допустимый URI, а не пустой.

Спасибо за помощь!

Смежные вопросы