C++ Builder и регулярные выражения

Программирование

Метки : , , , , ,

в C++ BuilderВ настоящее время большинство программ, использующих поиск в том или ином виде, поддерживают регулярные выражения (regular expressions). Например, знаменитая утилита линуксоидов grep является акронимом «search globally for lines matching the regular expression, and print them» — «искать везде строки, соответствующие регулярному выражению, и выводить их». Поиск по регулярным выражениям может использоваться для построения парсеров текста любой сложности. Применительно к программированию регулярные выражения могут использоваться для поиска в исходных текстах программ потенциально опасных конструкций.
Для работы с регулярными выражениями существует множество готовых библиотек, например PCRE, RE2, boost::regex с разной производительностью. Мы воспользуемся мощнейшей библиотекой Boost, существенно расширяющей возможности языка C++.

Скачать библиотеку можно с сайта boost.org, для моей древней версии C++ Builder 6.0 подходит старая версия библиотеки 1.33. Boost::regex является собираемой библиотекой, для ее использования необходимо её собрать. Скачиваем архив и распаковываем на диск. Заходим в папку \boost_1_33_0\tools\build\jam_src\ и в командной строке пишем build borland. Должно получиться что-то типа такого:

bjam compilation

После компиляции в текущем каталоге появится новый с именем bin.ntx86, в котором будет файл bjam.exe. Его необходимо скопировать в корневой каталог дистрибутива \boost_1_33_0\
Далее в корневом каталоге в командной строке пишем bjam “-sTOOLS=borland” install
После этого пойдёт долгий процесс компиляции, в результате которого на диске С будет создан каталог \boost\ с подкаталогами \lib\ и \include\.
Все файлы из подкаталога \lib\ необходимо перенести в папку библиотек BCB, по умолчанию это c:\Program Files\Borland\CBuilder6\Lib\.
Внутри подкаталога \include\boost-1_33\ есть подкаталог \boost\, его целиком необходимо перенести в папку BCB, по умолчанию это c:\Program Files\Borland\CBuilder6\Include\. В результате должно получиться примерно так:

Подключение boost к С++ Builder

После всех вышеперечисленных действий можно использовать библиотеку в своём проекте. Для этого воспользуемся готовым примером, который ищет в строке адрес email и выдаёт порядковый номер начала его позиции, а также вычленяет отдельно имя пользователя и домен:

#include <vcl.h>
#include <boost/regex.hpp>
#include <string.h> 
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
 std::string Message = "This is a test message containing email mimicria@mail.ru for boost";
 std::string Exp="([_a-zA-Z\\d\\-\\.]+)@([_a-zA-Z\\d\\-]+(\\.[_a-zA-Z\\d\\-]+)+)";
 boost::regex expression(Exp);
 boost::cmatch what;
 if (boost::regex_search(Message, what, expression))
 {
   std::string name, domen;
   name.assign(what[1].first, what[1].second);
   domen.assign(what[2].first, what[2].second);
   cout << "Found at: " << what.position(0)<< endl;
   cout << "Name: "<< name << ", domain: " << domen << endl;
 }
 else cout << "Email not found";
 return 0;
}

Скачать исходные тексты проекта можно здесь.
Прочитать больше про использование регулярных выражений boost можно здесь

Пожалуйста оцените статью:
Загрузка ... Загрузка ...


Похожие статьи:

Отправка почты через IdSMTP
В предыдущем примере мы рассмотрели получение почты с помощью...
Получение почты через NMPOP3
Доставкой почты от сервера к клиенту занимается протокол...
Отправка почты средствами Telnet
В предыдущем примере мы рассмотрели отправку почты с помощью...

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

Оставить комментарий

Материал используется исключительно в некоммерческих целях.
Все права на публикуемые графические, текстовые, аудио и видео материалы принадлежат их владельцам, при цитировании или копипасте прошу оставлять ссылку на оригинал.
Я искренне надеюсь на вашу заинтересованность в посещении этого сайта. Спасибо за внимание!