Всем привет! Возникла необходимость использовать регулярные выражения в c++ программе, как я понял изходя из поиска google в c++ нет стандартных методов для работы с regex, но есть библиотека boost решил заюзать ее но возникла проблема. Загрузил и установил boost Code: # svn co http://svn.boost.org/svn/boost/trunk boost-trunk # cd boost-trunk # ./bootstrap.sh # ./bjam install --prefix=/usr/local/boost boost установился в /usr/local/boost там две папки include и lib создал файл для теста Code: #include <stdlib.h> #include <boost/regex.hpp> #include <string> #include <iostream> using namespace boost; regex expression("([0-9]+)(\\-| |$)(.*)"); int main() { return 0; } компилю Code: # g++ t.c -I/usr/local/boost/include получаю кучу ошибок Code: /var/tmp//ccNJhz80.o(.gnu.linkonce.t._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j+0x22): In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)': : undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
Ты не подключил файлы буста скомпилированные. Расширение .a, или что там в линуксах... В папочке lib должен лежать. В C++ 0x уже есть)
Например, если надо выдрать из строки все вхождения подстроки Code: <>[COLOR=Magenta]Подсрока1[/COLOR]<> <>[COLOR=Magenta]Подстрока2[/COLOR]<> <>[COLOR=Magenta]Подстрока3[/COLOR]<> <>[COLOR=Magenta]Подстрока4[/COLOR]<> и поместить их в массив то для этого не обязательно нужен буст. Мне хватает трех функций. strstr(), strlen(),strncpy(). От boost/regex.hpp отказался еще год назад из за огромного размера exe. (#include <boost/regex.hpp> примерно + 300кб к exe )
и зачем это надо? тем более, если он пишет на плюсах. ужас какой. сей час ведь у всех интернет 2 кб/с и винты объемом в 100кб. зачем вы так в наглую игнорируете возможности языка? зачем писать 20 строк кода, если можно написать 5 строк?
Где Вы видите наглое игнорирование возможностей языка? Намек к тому что для простой работы со строками зачем использовать эту очень мощную библиотеку если хватает немногих функций которым уже много лет.
как минимум использование всяких сишных strstr(), strlen(),strncpy(). есть ведь std::string, с которым очень удобно работать. как было написано в посте #2 в С++ уже есть стандартные методы для работы с регулярками. заголовочный файл regex.
ReL@X, если ты так хочешь маленький размер, то пиши на чистом WinAPI и ком-интерфейсах винды. Там есть регулярки
Спасибо за наводку, с удовольствием почитаю PS Я не маленький размер хочу, а понимать то с чем работаю. Как это работает. ну хотя бы примерно . прежде чем пользоватся в boost Чтобы не быть голословным, небольшая консолька которая парсит никнеймы всех пользователей с главной страницы, forum.antichat.ru, и записывает в текстовик. http://slil.ru/31383644 Заголовки такие #include <Windows.h> #include <stdio.h> #include <wininet.h>