Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++: what regex library should I use? [closed]

Tags:

c++

regex

linux

I'm working on a commercial (not open source) C++ project that runs on a linux-based system. I need to do some regex within the C++ code. (I know: I now have 2 problems.)

QUESTION: What libraries do people who regularly do regex from C/C++ recommend I look into? A quick search has brought the following to my attention:

1) Boost.Regex (I need to go read the Boost Software License, but this question is not about software licenses)

2) C (not C++) POSIX regex (#include <regex.h>, regcomp, regexec, etc.)

3) http://freshmeat.net/projects/cpp_regex/ (I know nothing about this one; seems to be GPL, therefore not usable on this project)

like image 380
Stéphane Avatar asked Oct 08 '08 07:10

Stéphane


People also ask

What does regex library do?

The regular expressions library provides a class that represents regular expressions, which are a kind of mini-language used to perform pattern matching within strings. Almost all operations with regexes can be characterized by operating on several of the following objects: Target sequence.

Is regex slow C++?

I would say C++11 regex is much slower than perl and possibly than python. To measure properly the performance it is better to do the tests using some not trivial expression or else you are measuring everything but the regex itself. in real scenarios I get ratios about 100 to 200 times slower.

Is regex part of the standard library?

C++ Regular Expressions with std::regex. The C++ standard library as defined in the C++11 standard provides support for regular expressions in the <regex> header. Prior to C++11, <regex> was part of the TR1 extension to the C++ standard library.

What is boost regex?

Boost. Regex allows you to use regular expressions in C++. As the library is part of the standard library since C++11, you don't depend on Boost. Regex if your development environment supports C++11.


2 Answers

Boost.Regex is very good and is slated to become part of the C++0x standard (it's already in TR1).

Personally, I find Boost.Xpressive much nicer to work with. It is a header-only library and it has some nice features such as static regexes (regexes compiled at compile time).

Update: If you're using a C++11 compliant compiler (gcc 4.8 is NOT!), use std::regex unless you have good reason to use something else.

like image 108
Ferruccio Avatar answered Oct 08 '22 02:10

Ferruccio


Thanks for all the suggestions.

I tried out a few things today, and with the stuff we're trying to do, I opted for the simplest solution where I don't have to download any other 3rd-party library. In the end, I #include <regex.h> and used the standard C POSIX calls regcomp() and regexec(). Not C++, but in a pinch this proved to be the easiest.

like image 23
Stéphane Avatar answered Oct 08 '22 03:10

Stéphane