2009-09-14 11 views
15

Lo fa? Se sì, dove posso ottenere la documentazione per questo ... se no, quale sarebbe l'alternativa migliore?C o C++ ha una libreria regolare di espressioni regolari?

+0

Quasi duplicati: http://stackoverflow.com/questions/181624, http://stackoverflow.com/questions/923500 e http://stackoverflow.com/questions/815429. –

+1

http://stackoverflow.com/questions/329517/there-is-a-function-to-use-pattern-matching-using-regular-expressions-in-c – dmckee

+1

BTW: avresti potuto avere un sacco di informazioni più velocemente e più facile da cercare: http://stackoverflow.com/search?q=c+c%2B%2B+regex+standard – dmckee

risposta

31

C++ 11 ora ha finalmente un standard regex library - std :: regex.

Se non si ha accesso a un'implementazione C++ 11, una buona alternativa potrebbe essere boost regex. Non è completamente equivalente a std :: regex (ad esempio the "empty()" method is not in the std::regex) ma è un'implementazione regex molto matura per C++.

+0

Questa risposta è datata, dal 2012 la risposta è ora Sì, C++ ha una libreria regex standard, mandato da C++ 11, sotto l'intestazione "regex" –

+0

@ Callirvoire - Ho deciso di modificare/aggiornare la mia risposta alle modifiche dalla fine del 2009, grazie per l'heads-up su questa risposta obsoleta. –

+0

La differenza è anche che lo standard C++ non supporta sottogruppi denominati, ovvero denominare parti di espressioni regolari in modo che in seguito sia possibile ottenerle per nome. – user3111311

5

Controllare la libreria boost regex. Dovrebbe diventare parte dello standard con C++ 0x.

3

Se da standard si intende in bundle con il compilatore, quindi no. Ma la maggior parte degli altri linguaggi che raggruppano l'estensione regex utilizzano implementazioni standard piuttosto che c. Per esempio. Le librerie PCRE - Perl Compatible Regular Expression e C hanno supporto di regex POSIX (vedere man page).

6

Microsoft Visual C++ 2008 Feature Pack 1 (ora inserito in Visual Studio 2008 Service Pack 1) contiene un'implementazione dei tipi di reg TR1 "ufficiali". Esauriti :-)

1

Qt, da Trolltech, ha anche un'implementazione regex che trovo molto facile da usare. Tuttavia, se non stai pianificando di utilizzare Qt per qualsiasi altra cosa, utilizzerei Boost.Regex come probabilmente ti piacerebbe usare Boost anche per altri scopi.

1

Il linguaggio di programmazione standard ISO/IEC 14882: 2011 C++ descrive una classe regex come parte della libreria di C++, che è fortemente influenzata dalla libreria Boost matura.

Stranamente, a partire da gennaio 2013, la conformità dei compilatori a questo standard è ancora discutibile, ad es. il popolare compilatore C++ della compilatrice GNU non supporta/aderisce a questa parte dello standard.

Per questo motivo, è meglio utilizzare Boost in questo momento fino a quando il supporto del compilatore non raggiunge la conformità.

Problemi correlati