Актуальный сизиф. gcc 4.1.1 20060928 (ALT Linux, build 4.1.1-alt9) Есть следующий код int main( int argc, char** argv ) { try { boost::regex re("(\\w+):\\/\\/(([^:]+?)(:(.+))?@)?([^:\\/]+)(:(\\d+))?((\\/.+?)*)(\\?(.+?))?(#(.+))?"); boost::match_results<std::string::const_iterator> what; std::string first("http://breeze@abc.ru/index.php?v=2008#123"); boost::regex::locale_type loc("ru_RU.cp1251"); // re.imbue( loc ); for( int i=0; i<5; ++i ) { if( !boost::regex_match(boost::algorithm::trim_copy(first), what, re) ) continue; cerr << "res = " << what[12].str() << endl; string tmp = boost::algorithm::trim_copy(first); if( !boost::regex_match(tmp, what, re) ) continue; cerr << "res2 = " << what[12].str() << endl; } re.imbue( loc ); } catch (std::exception& ex) { cerr << "UGLY STANDART ERROR: " << ex.what() << endl; return -1; } catch(...) { cerr << "UGLY ERROR: UNHANDLED EXCEPTION" << endl; return -1; } return 0; } Данные код просто парсит URL при помощи boost::regex, есть две проблемы: 1. Строки "res=..." и "res2=..." должны быть одинаковыми, реально получается res = keywords=%CC%E5%E3%E0%F4%EE%ED&pad_i╧╟│ь╥╟│ь╥194.67.27.46&version=2008 res2 = keywords=%CC%E5%E3%E0%F4%EE%ED&pad_id=190905&ip=194.67.27.46&version=2008 т.е. в строке "res=..." присутствует явный мусор 2. Раскоментирование строки re.imbue( loc ); приводит к появлению "Исключение в операции с плавающей точкой" PS Возможно я обратился не по адресу - подскажите, куда следует обратиться Steps to Reproduce: make && run
Прошу прощения - слишком упростил, реально должно быть например так std::string first("http://breeze@abc.ru/banner.jsp?keywords=%CC%E5%E3%E0%F4%EE%ED&id=1&ip=1.1.1.1&version=1#123"); при этом получается res = keywords=%CC%E5%E3%E0%F4%EE%ED&iи╟Aь╥╟Aь╥.1&version=1 res2 = keywords=%CC%E5%E3%E0%F4%EE%ED&id=1&ip=1.1.1.1&version=1
Первая часть проблемы, скорее всего связана не с boost, а с gcc(Bug 10144), но вторая часть с imbue() остаётся
Пока времени нет подвердить или опровергнуть, до конца недели обещаю разобраться.
Что-то прояснилось?
На новом бусте воспроизводится?
В новой версии были исправления на эту тему.