Обсуждение статьи тематического каталога: Регулярные выражения в C++ Использование библиотеки PCRE. (pcre gcc cpp regex)Ссылка на текст статьи: http://www.opennet.dev/base/dev/pcre_cpp.txt.html
не получается, однако... в точности примеру следую, но при make вываливается ошибка
main.c:(.text+0x57): undefined reference to `pcre_compile'
main.c:(.text+0xb9): undefined reference to `pcre_exec'
согласен с предыдущим оратором
gcc -lpcre ...
А вот почитать следующую штукенцию: man pcre-config ?
PCRE-CONFIG(1)NAME
pcre-config - program to return PCRE configurationSYNOPSIS
pcre-config [--prefix] [--exec-prefix] [--version] [--libs]
[--libs-posix] [--cflags] [--cflags-posix]Пример вызова: gcc -Wall `pcre-config --libs` -o main main.c
g++ test-pcre.cpp -o test-pcre -I /usr/local/include/ /usr/local/lib/libpcrecpp.soПод FreeBSD я это делаю так.
Непонятна ссылка на С++... Видно автор не в курсе, но это чисто С-ишная библиотека... Для С++ pcre есть wrapper PCRE с соответствующими классами и было бы логично использовать его. Хотя это конечно дело вкуса... Регулярные выражения это не объектные а функциональные технологии... В Си есть и класическая библиотека с урезанными возможностями. Там ничего подключать не надо. И часто её бывает достаточно. Глюк там только один, не работает символьный класс \d
может быть автор в курсе, но статья видимо рассчитывает на поиск яндекса, который игнорирует букву "C" (англ.) как "язык Си" и ищет что угодно к си не относящееся (пхп там и прочий яваскрипт). Я например на эту страницу попал, набрав "C++ регулярные выражения", разыскивая библиотеку именно для си.
а вообще, имхо, 99,9% статей и примеров якобы на С++ - чистой воды си
В конце статьи delete locale_tables - в корне неверно. delete - это оператор Си++, им нельзя освобождать память выделенную средствами Си. Правильно так:
pcre_free(locale_tables);
Фукнции в библиотеке написаны говнорукастыми разработчикфми. Нигде нельзя найти нормальное объяснение что фукнция возвращает что принимает. Одним словом лучше не писать код, чем писать код так.
count = pcre_exec (re, NULL, (char *) str, 4, 0, 0, ovector, 30);
Данное выражение не корректно,на деле приходится считывать через while до результата -1, чтобы обработать все шаблоны в строке