Как стать автором
Обновить

Комментарии 39

класс и материал отличный и изложение и оформление не подкачало.
эталонная статья на хабре, все бы такие были

жду продолжений
IMHO, гораздо интереснее было бы прочитать о том, как: благодаря boost мы повысили нашу эффективность на 500%, или решение задачи коммивояжера на boost генетическим алгоритмом, или boost и управление Большим Адронным Коллайдером, или распознавание номеров автомобилей на фотографиях с реализацией на C++/boost, или символьные вычисления в boost. Что-то в таком роде, хоть с каким-нибудь интересным примером. Tutorial'ы же все умеют читать.
напишите, подайте пример
Уже писал несколько раз. Boost же мне не интересен. И потом, я же просто выражаю своё мнение о том, как подобные введения в библиотеки делать интереснее. Перечисление набора функций совсем ничего не даёт — их описания и без того доступны. Гораздо интереснее увидеть то, чего эти функции позволяют в итоге достичь. Хотя бы сравнили с pcre в скорости работы и в удобстве использования.
НЛО прилетело и опубликовало эту надпись здесь
Приятнее и быстрее прочитать что-то на русском (это если с английским не очень)
НЛО прилетело и опубликовало эту надпись здесь
Ну это не пример))) хотя улыбнуло )
Автор статьи по-моему грамотно написал.
Я бы согласился, если бы не имело место такое большое число опечаток в статье. Лично мне приятнее читать чистый «чужой» язык, чем неаккуратный родной.

В любом случае, автору — спасибо.
Статья хорошая, спасибо.

Еще, правда, интересует сравнительная характеристика Boost.Regex и QRegExp из Qt: что в каких случаях предпочтительнее и почему.
По скорости я их не сравнивал, но по возможностям регулярки из Qt уступают бустовским. В QRegExp некоторое не реализовано, например lookaround, что не дает полноценно использовать регулярки. Лично я использую boost::regex вместе с Qt. Кстати в сети есть адптер boost::regex под Qt, подстроенный под кутешные типы.
Спасибо, что пишите такие статьи, давно хотел посмотреть регэксп в бусте, да как-то руки не доходили. Теперь как-нибудь на досуге, начну с вашего поста.
НЛО прилетело и опубликовало эту надпись здесь
Судя по блогу VS team, intellisense они должны значительно улучшить для vs2010. А пока, можно использовать vissual assist, правда он платный, и может быть установлен только на платную версию VS :(
исправьте «результаты_нахождения_соответсТвий»
спасибо, поправил.
Спасибо! Освоил регулярные выражения вместе с перлом, теперь орабатывать строки в C++ будет проще.
Статься не плохая, но я бы убрал заголовок «Boost это просто». Это не просто. Для того, чтобы использовать boost надо понимать хотя бы как он устроен и что делать, когда у вас ошибка и это не опечатка. Для того, чтобы это хотя бы понимать, надо прилично владеть шаблонами и tmp.

Поэтому все же для новичков, это обманчивая простота, имхо.
Статья*
Я бы не был столь категоричен, для использования того же regex, можно и не владеть шаблонами вообще. Т.к все шаблонизированные классы заtypdefчены в алиасы, которые потом и используются. Если вы посмотрите на код в моих примерах, то можете увидеть, что там нет явных шаблонов.
К тому же, я не считаю основы С++ чем-то сложным, все таки если человек хочет продвинуто использовать язык, он должен в нем ориентироваться. А как устроен буст и его исходники знать не обязательно, более того, меня часто в пот бросает от исходников буста :) Но это не мешает мне его использовать. Я, собственно, и запланировал пистать статьи в подобном ключе, чтобы новичек в бусте не терялся, а мог максимально быстро получить требуемую ему информацию.
К тому же, «Буст это просто» располагает человека, к простоте на подсознательном уровне, стирая барьеры ужаса перед бустом(да да и такое бывает, я видел несколько людей находящимся в священном трепете перед бустом :) )
Я не категоричен. Я как раз тоже отношу себя к новичкам. И мне boost очень нравится, но в проде я бы не рискнул его использовать, так как случись что, я просто не смогу разобраться оперативно в ошибке, потому что даже понять портянку на несколько экранов не просто.
Не бойтесь его использовать, поначалу может и будет туго, потом приучитесь.
По поводу чтения «простыней» ошибок, советую прочитать 49 совет из вот этой книжки, да и сама книжка будет полезна, не только новичку.
Эх, я кстати, давно ищу что-нибудь стоящее по STL. Этой книги в России вообще не видел в продаже :-(
В продаже не найдешь. Саттера недавно переиздали, а Майерса нет, как и многих других отличных авторов. Но можно скачать в сети, они есть в неплохом качестве. Хотя я бы посоветовал читать на английском сразу, в будущем все равно придется.
Чтобы легче было разгребать портянки на несколько экранов можно использовать STLFilt.
отличная статья, жаль, что для меня уже не актуальная :)
Сам во всём разбирался. Кстати, автор, match_extra у меня в RAD Studio 2009 работал как надо.

еще не совсем понял почему regex_match пытается поставить в соответствие всю строку регулярному выражению.
А если мне нужно из текста выдрать несколько одинаковых конструкций, ну к примеру внутри формы вытащить все инпуты, то приходится извращаться вот так:

boost::regex xRegEx(".*(<input[^>]*>)+.*");
т.е. «лишние» по сравнению с php конструкции вида ".*(<выражение>)+.*"

Это и очень отжирает память, ведь в результаты идет вся строка.

Да, дополнительно еще раз отмечу, что в результатах помещаются указатели на исходную строку, и пока не разберешь результаты поиска, ничего с искомой строкой делать нельзя :) Сам на это попадался, прога вылетала с Access Violation в произвольном месте, еле откопал причину.
>еще не совсем понял почему regex_match пытается поставить в соответствие всю строку регулярному >выражению.
>А если мне нужно из текста выдрать несколько одинаковых конструкций, ну к примеру внутри формы >вытащить все инпуты, то приходится извращаться вот так
Для этого лучше использовать regex_search в цикле, или вспомогательные стредства типа regex_iterator и regex_token_iterator. regex_match служит для валидации строки.
А вот как раз с regex_iterator'ами я и не разобрался :)

Блин, и почему нельзя было сделать Regex_search с флагом match_all?
ну как минимум чтобы соответствовать С++0x. Нет смысла перегружать функции лишними возможностями, которые могут быть реализоваными через простой цикл. Всем не угодишь :)
Можете подсказать хорошее сравнение RegExp-библиотек для C++?
Почему Вы выбрали именно Boost? Я пока в поисках, но Boost меня сильно испугал тем, что пришлось качать и устанавливать несколько сотен мегабайт, когда я хотел простую компактную RegExp-библиотеку.
Посмотрите
Я выбрал boost, потомучто это лучшее, что было создано для C++, за все его время существования, конкретно boost::regex я выбрал, потомучто меня не устроил функционал предоставляемый Qt::RegExp.
А размера буста боятся не стоит, он во многих вещах спасает + любой уважающий себя С++ программист, должен стараться освоить буст, я считаю. Поверьте, Вы получите большое преимущество, научившись использовтиаь буст.
Спасибо за ответ.
В boost есть утилита bcp которая позволяет вытаскивать только конкретные библиотеки.

Также boost, насколько я понимаю, в некоторых местах будет частью нового стандарта. Если не прав, знатоки пусть подправят. Например, в моей системе уже есть tr1/memory/shared_ptr из boost.

Так что игнорировать его неправильно, наверное.
правильно, многое, из того что появляется в бусте входит в дальнейшем в стандарт.
Вот здесь, описаны фичи из tr1 которые реализованы в бусте.
Справедливости ради нужно заметить, что качать нужно всего 27 МБ. Компилировать всё тоже совершенно не обязательно — достаточно скомпилировать только нужную библиотеку, а часть библиотек так вообще полностью в заголовочных файлах и линковать ничего не нужно. Если вы пишете под Windows всё ещё немножечко проще — под Windows работает Auto-Linking и вам не нужно указывать какую библиотеку линковать в какой конфигурации — нужно просто указать где собранные библиотеки лежат.
Я как раз ожидал, что меня поправят и скажут, что это я просто неправильно её использовал.
Я подозревал, что сотни метров ради одних регекспов — это что-то не то.
Спасибо
Покажите, пожалуйста, использование regex (boost::match_results, boost::regex_match и т.п.) на примере работы с wchar_t строками (std::wstring)

P.S.
Прежде чем отписываться кэповскими советами, для начала попробуйте сами поменять std::string на std::wstring и собрать примеры.
не знаю насчет актуальности, но столкнулся с этой же проблемой.
Решение: использовать boost::wregex и boost::wsmatch
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории