C++ regxp

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by maxfax, 5 Jul 2011.

  1. maxfax

    maxfax New Member

    Joined:
    23 Jun 2010
    Messages:
    25
    Likes Received:
    0
    Reputations:
    0
    Всем привет!

    Возникла необходимость использовать регулярные выражения в 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)'
    
     
  2. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Ты не подключил файлы буста скомпилированные. Расширение .a, или что там в линуксах... В папочке lib должен лежать.

    В C++ 0x уже есть)
     
  3. ReL@X

    ReL@X New Member

    Joined:
    1 Jul 2011
    Messages:
    8
    Likes Received:
    1
    Reputations:
    2
    Например, если надо выдрать из строки все вхождения подстроки
    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 ) :confused:
     
  4. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    и зачем это надо? тем более, если он пишет на плюсах.
    ужас какой. сей час ведь у всех интернет 2 кб/с и винты объемом в 100кб.

    зачем вы так в наглую игнорируете возможности языка?
    зачем писать 20 строк кода, если можно написать 5 строк?
     
  5. ReL@X

    ReL@X New Member

    Joined:
    1 Jul 2011
    Messages:
    8
    Likes Received:
    1
    Reputations:
    2
    Где Вы видите наглое игнорирование возможностей языка?
    Намек к тому что для простой работы со строками зачем использовать эту очень мощную библиотеку если хватает немногих функций которым уже много лет.
     
  6. boxflip0

    boxflip0 New Member

    Joined:
    14 May 2011
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Если тебе нужны только регекспы, проще использовать pcre.
     
  7. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    как минимум использование всяких сишных strstr(), strlen(),strncpy().
    есть ведь std::string, с которым очень удобно работать.

    как было написано в посте #2 в С++ уже есть стандартные методы для работы с регулярками. заголовочный файл regex.
     
  8. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    ReL@X, если ты так хочешь маленький размер, то пиши на чистом WinAPI и ком-интерфейсах винды. Там есть регулярки :)
     
  9. ReL@X

    ReL@X New Member

    Joined:
    1 Jul 2011
    Messages:
    8
    Likes Received:
    1
    Reputations:
    2
    Спасибо за наводку, с удовольствием почитаю :)

    PS Я не маленький размер хочу, а понимать то с чем работаю. Как это работает. ну хотя бы примерно :). прежде чем пользоватся в boost

    Чтобы не быть голословным, небольшая консолька которая парсит никнеймы всех пользователей с главной страницы,
    forum.antichat.ru, и записывает в текстовик. http://slil.ru/31383644
    Заголовки такие
    #include <Windows.h>
    #include <stdio.h>
    #include <wininet.h>