Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Функция поиска и замены с regular expressions

294
18 октября 2004 года
Plisteron
982 / / 29.08.2003
Порекомендуйте, плиз, какую-нибудь функцию (я исходник на C/C++ имею в виду) для поиска и замены в строке, поддерживающую regular expressions типа "[0-9]{2}(.*?)[0-9]", неохота самому писать, знаю же, что всё уже написано до нас.
294
18 октября 2004 года
Plisteron
982 / / 29.08.2003
Цитата:
Originally posted by Plisteron


Кто ищет, тот найдёт.
Если кому-нибудь ещё такое надо, собщаю: нашёл либу вот по этому адресу

4.5K
18 октября 2004 года
NightSleeper
43 / / 09.10.2004
Цитата:
Originally posted by Plisteron
Порекомендуйте, плиз, какую-нибудь функцию (я исходник на C/C++ имею в виду) для поиска и замены в строке, поддерживающую regular expressions типа "[0-9]{2}(.*?)[0-9]", неохота самому писать, знаю же, что всё уже написано до нас.



В принципе рег. выражения позволяют создавать и использовать любые шаблоны, на то они и рег. выражения :) . Ниже привожу изыскания г-на Garik'а aka Просто Хороший Человек, помещённые им в форуме progz.ru:

"Итак, для себя я выбор сделал, хочу поделиться результатами своих изысканий - может кому еще пригодится.
Кстати, сразу извиняюсь за некоторые неточности - немного торопился.

Итак, открывает список библиотека RegEx.
Сайт: http://www.gnu.org/directory/regex.html
В исходниках, распространяется по лицензии GNU.
Насколько мне удалось разобраться, эта библиотека является прародительницей почти всех остальных библиотек для работы с регулярными выражениями.
Структура библиотеки предельно проста - всего 2 файла: H и CPP.
Однако, на этом плюсы этой библиотеки, которые мне удалось найти, заканчиваются и начинаются минусы. Библиотека очень старая! Последняя версия 0.12 датируется апрелем 1993 года. Библиотека абсолютно не заточена под современные среды разработки. Кроме того, очень мало документации и совсем нет примеров (что, впрочем, характерно для проектов GNU).

Следующая библиотека - RX (не путать с RXlib для Delphi).
Сайт: http://www.gnu.org/directory/rx.html
Это тоже GNU-проект. Насколько я понял, базируется на RegEx.
Все те же недостатки, плюс сложная структура библиотеки - много файло, назначение которых непонятно. Документации минимум.
Библиотека поновее RexEx, но тоже очень старая - последняя версия 1.5 датирована ноябрем 1996 года.

Далее идет PCRE (Perl Compatible Regular Expressions).
Сайт: http://www.pcre.org
Распространяется по лицензии SourceForge, но есть версия и на GnuWin32.
Библиотека полностью поддерживает синтаксис регулярных выражений Perl5. Нормально поддерживается - последняя версия 4.5 датирована маем 2003 года. С документацией и примерами, правда, тоже туговато. Как и с адаптацией к средствам разработки под Windows (ориентирована библиотека в основном на Unix-компиляторы).

Далее по списку - GRETA.
Сайт: http://research.microsoft.com/projects/greta/
Библиотека Microsoft, распространяется бесплатно в составе пакета PowerTools.
Библиотека небольшая, достаточно простая, поддерживает синтаксис Perl5, заточена под среду Visual C++. В документации написано, что она самая быстрая из всех (не проверял). Из недостатков отмечу только отсутствие в документации примеров.
Последняя версия - 2.6.4, датирована июлем 2003 года.

И наконец, на сладкое - то, на чем я остановил свой выбор - библиотека Boost.
Сайт: http://www.boost.org
Как любезно поянил мне Влад, эта библиотека - набор компонентов, которые проходят обкатку перед включением в Стандарт C++. В числе прочих там есть библиотека Boost.Regex для работы с регулярными выражениями.
Библиотека шаблонная, поэтому может работать с любыми типами строк. Возможностей очень много. Плюс хорошая документация с большим количеством примеров.
Библиотека заточена под множество современных сред, в том числе Visual C++ и C++Builder. Ставится легко и без проблем (проверял).
Кроме того, отлично поддерживается - последняя версия - 1.31.0 от 26.01.2004.
Ничего лучше я не нашел. Потому на ней и остановился.
:) "

Мне понравилась GRETA, по объёму она на библиотеку не тянет, зато подключать и работать с ней удобнее, чем например Boost.regex. Самое то, если не хочется сильно отвлекаться от создаваемой проги. GRETA не работает в Builder'e, я хотел использовать - ан не получается.

Зато Boost.regex можно использовать на 4 компиляторах. Пробовал в Builder'е, вроде работает.

А с PCRE у меня (в VC++) пробема: рег. выражение после использования не хочет освобождать память, даже если использовать предусмотренную для этого фичу, в цикле кошмар получается :( .
Вот здесь об этой библиотеке на русском языке.

294
18 октября 2004 года
Plisteron
982 / / 29.08.2003
Цитата:
Originally posted by NightSleeper


Спасибо за столь исчерпывающий ответ, NightSleeper!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог