C++: какую библиотеку регулярных выражений следует использовать? [закрытый]



Я работаю над коммерческим (не открытым исходным кодом) проектом C++, который работает в системе на базе linux. Мне нужно сделать некоторые регулярные выражения в C++ код. (Я знаю: теперь у меня есть 2 проблемы.)



вопрос: в какие библиотеки рекомендуют заглядывать люди, которые регулярно выполняют регулярное выражение из C/C++? Быстрый поиск привлек мое внимание к следующему:



1) импульс.Regex (мне нужно прочитать лицензию на программное обеспечение Boost, но этот вопрос не о программном обеспечении лицензии)



2) C (не C++) POSIX regex (#include , regcomp, regexec и др.)



3) http://freshmeat.net/projects/cpp_regex/ (я ничего не знаю об этом; кажется, GPL, поэтому не используется в этом проекте)

2831   10  

10 ответов:

импульс.Регулярное выражение очень хорошо и планируется стать частью стандарта C++0x (это уже в TR1).

лично мне импульс.Марки гораздо приятнее работать. Это библиотека только для заголовков, И она имеет некоторые приятные функции, такие как статические регулярные выражения (регулярные выражения, скомпилированные во время компиляции).

обновление: если вы используете компилятор, совместимый с C++11 (gcc 4.8 - нет!), используйте std:: regex Если у вас нет веской причины чтобы использовать что-то другое.

Спасибо за все предложения.

сегодня я попробовал несколько вещей, и с тем, что мы пытаемся сделать, я выбрал самое простое решение, где мне не нужно загружать какую-либо другую стороннюю библиотеку. В конце концов, я #include и использовал стандартные вызовы C POSIX regcomp () и regexec (). Не C++, но в крайнем случае это оказалось самым простым.

в прошлых проектах на C++ я использовал PCRE С хорошим успехом. Он очень полный и хорошо протестирован, так как он используется во многих проектах высокого профиля. И я вижу, что Google недавно также внесла набор оболочек C++ для PCRE.

C++ имеет встроенную библиотеку регулярных выражений с TR1. Библиотека регулярных выражений AFAIK Boost очень совместима с ней и может использоваться в качестве замены, если ваша стандартная библиотека не предоставляет TR1.

два варианта:

Если вы можете написать его в c++11 - сделать учебник:http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c15339

Примечание.: На момент написания единственная библиотека регулярных выражений c++11, которую я знаю, работает, это clang / llvm one, и работает только на Mac. Пне все равно еще не реализует регулярное выражение. Я не знаю о Visual Studio. Большинство людей все еще используют увеличить регулярное выражение реализация.


или вы можете использовать Рагель чтобы создать конечный автомат для выполнения синтаксического анализа для вас и создать реализацию кода C / C++:http://www.complang.org/ragel/

я использовал его немного для генерации кода для разбора json. Этот файл ragel:https://github.com/matiu2/yajp/blob/master/parser/number.rl используется для генерации этого код https://github.com/matiu2/yajp/blob/master/parser/json.hpp#L254 и эта диаграмма конечного автомата:

state diagram


обновление 1:

регулярное выражение libc++ lvm работает на ubuntu 14.04: libc++-dev - LLVM C++ стандартная библиотека (файлы разработки). При компиляции: clang++ -std=c++11 -lc++ -I/usr/include/c++/v1 ...

обновление 2:

в настоящее время я наслаждаюсь boost spirit 3 - мне нравится больше чем регулярное выражение, потому что оно имеет правила стиля BNF и хорошо продумано. (Более старый (более документированный) дух Qi libs найти здесь)

повышение выражение в нем.

Это должно заполнить счет

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

Я лично всегда использовал boost.регулярное выражение (хотя у меня нет большой потребности в регулярном выражении в C++). Microsoft Labs также имеет библиотеку регулярных выражений, называемую GRETA:http://research.microsoft.com/projects/greta/. по-видимому, это очень быстро и имеет целый синтаксис Perl 5. Я не использовал его, но вы можете проверить его.

Я столкнулся с аналогичной ситуацией и в конечном итоге использовал двигатель регулярных выражений Генри Спенсера http://www.codeproject.com/KB/string/spencerregexp.aspx

никто здесь ничего не сказал о том, что поставляется с C++0x. Если вы используете компилятор и STL, который поддерживает C++0x, вы можете просто использовать его вместо того, чтобы иметь другую lib в своем проекте.

Comments

    Ничего не найдено.