04
В настоящее время большинство программ, использующих поиск в том или ином виде, поддерживают регулярные выражения (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. Должно получиться что-то типа такого:

После компиляции в текущем каталоге появится новый с именем 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\. В результате должно получиться примерно так:

После всех вышеперечисленных действий можно использовать библиотеку в своём проекте. Для этого воспользуемся готовым примером, который ищет в строке адрес 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 можно здесь
Похожие статьи:
|
|
|
|




выполнил попытку космпиляции т.е вызвал
build borland.но ни каталога bin.ntx86, ни файла bjam.exe у меня не появилось!
Ну в общем причину отсутствия компиляции кажется понял но пока не исправил. -
она в том что файл build.bat вызывает компилятор bcc32 а тот не может найти (подцепить ряд c-файлов каталога \jam_src
if EXIST “C:\Borland\BCC55\Bin\bcc32.exe” (
set BOOST_JAM_TOOLSET=borland
set BOOST_JAM_TOOLSET_ROOT=C:\Borland\BCC55\
goto :eof)
Пробовал изменить системную переменную path добавив к ней путь
d:\mathem_libraries\boost_1_32_0\tools\build\jam_src
но это не помогло