2009-05-02 10 views

risposta

8

PCRE è la libreria regex standard de-facto per C (e funziona anche in C++).

(Che cosa il vostro editor sta facendo non so Utilizzando una libreria come PCRE o uno qualsiasi degli altri suggerito non cambia la sintassi del C -.. Le definizioni di espressioni regolari saranno sempre tenuti in stringhe)

0

Non penso che sia possibile eseguire un'espressione regolare in C++ senza utilizzare alcuna libreria di terze parti. Qt e Gtk +/Gtkmm vengono entrambi con questi. Visual C++ 2008 ha anche questa capacità.

1

Boost.Xpressive consente di scrivere regexs come stringhe (come in Boost.Regex) o staticamente con i modelli di espressione. È simile a Boost.Spirit per grammatiche.

Ad esempio, questi due sono equivalenti:

sregex rex1 = sregex::compile("(\\w+) (\\w+)!"); //normal string based way 
sregex rex2 = (s1= +_w) >> ' ' >> (s2= +_w) >> '!'; //expression template way 
2

espressioni regolari sono parte del ++ C libreria estensione tipo definita TR1 (see Chapter 7 in Documentation). Il dinkumware library i.e ha implementato le estensioni regEx. Non so su altre implementazioni.

Le estensioni sono semplici e semplici da utilizzare.

1

Solo per completezza, Qt ha uno QRegExp che può eseguire la corrispondenza delle espressioni regolari.
Di solito è utile se avete bisogno di una piccola espressione regolare per una funzione remota nella vostra applicazione Qt grande. Per qualcosa di più serio, PCRE è sicuramente la strada da percorrere.

1

No, il C++ non ha e non ha intenzione di ottenere, regex utilizzando la sintassi /.../ utilizzata in alcune lingue. Il tuo editor è sbagliato.

Come tutte le altre risposte mostrano, le librerie regex per C++ esistono (e una è programmata per l'inclusione in C++ 0x), ma elaborano stringhe, delimitate da ", non barre, quindi non sono la ragione per Comportamento del tuo editor

0

Se sei in Visual Studio puoi usare Greta (cerca regex di greta) ma penso che sia un po 'più lento di boost.E' davvero facile da usare però.

1

Se si utilizza Visual Studio e la portabilità non è un problema importante, è possibile ottenere risultati abbastanza rapidamente (senza download, senza installazioni) con una struttura ATL carina denominata CAtlRegExp. Contiene l'analisi e l'abbinamento di RegEx completo ed efficiente (online sample). Tuttavia, non hanno paragonato le sue prestazioni a BOOST.