Vă mulțumim pentru susținere

Ușor de utilizat Suport regulat de expresie în C ++?

Caut un evaluator de expresii regulat robust, ușor de utilizat, pentru C ++ nativ, fie independent de platformă, fie specific Windows.

cerinţe:

  • Nu se pot utiliza bibliotecile Boost sau ACE regex (din păcate)
  • Nu se poate utiliza .NET Regex (sau orice cod gestionat)

Principala cerință este ca aceasta să fie autonomă și deschisă.

0
adăugat editat
Dar clienții nu trebuie să aibă instalat un impuls. Doar link-ul static cu impuls, și nu ar trebui să fie nici o problemă. (Și ar trebui să vă conectați întotdeauna static cu un impuls oricum, deoarece, chiar dacă clienții au instalat, este posibil să nu aibă aceeași versiune sau să fi compilat-o cu aceleași opțiuni.)
adăugat autor James Kanze
@JamesDevlin Nu știu despre transportul maritim cu Boost; Boostul nu este un panaceu și eu aleg să îl folosesc sau nu de la caz la caz. (De fapt, din moment ce acum pot folosi C ++ 11, eu nu folosesc Boost deloc. Tot ce i-am folosit înainte a fost expresii regulate.)
adăugat autor James Kanze
Doar curioși - de ce nu puteți folosi impulsul?
adăugat autor svec

9 răspunsuri

Biblioteca GNU C acceptă expresii regulate . Este deschis, iar codul RE pare a fi ușor de extras.

0
adăugat

If you use Visual Studio you can use Visual C++ 2008 Feature Pack Release, this implements some of TR1, and includes regular expression parsing. Get it

0
adăugat

try libpcre

Dacă sunteți blocat pe ferestre au un port de Windows care ar trebui să funcționeze. Știu că e-texteditor o folosește, deci cel puțin asta e dovada că funcționează :-)

0
adăugat

De ce nu folosiți biblioteca regex Microsoft ATL? Kenny Kerr a scris o articol scurt pe care recent.

ATL include o implementare ușoară a expresiei regulate. Cu toate ca   inițial parte a Visual C ++, este acum inclusă în serverul ATL   descărcare.

     

Șablonul de clasă CAtlRegExp implementează parserul și potrivirea   motor. ...

     

Gramatica expresiei regulate este definită în partea de sus a atlrx.h   fișierul antet.

0
adăugat

C++11 and forward now contains the standard regular expression library.
Include the header, and use.

0
adăugat

The free ATL Server Library and Tools from CodePlex includes a regex parser. See AtlServer in the CodePlex Archive

Serverul ATL este o bibliotecă de clase C ++ care permit dezvoltatorilor să construiască   atât pentru părțile client cât și pentru serverele de aplicații C ++ de tip serviciu și web   Servicii. Acesta oferă o mare parte din funcționalitatea necesară pentru construire   pagini de Internet de mare amploare, cum ar fi mesajele SOAP, caching-ul   facilități, instalații de filetare, procesare expresie regulată,   gestionarea sesiunii de stat, monitorizarea performanțelor, suport MIME,   integrarea cu IIS și clasa pentru interacțiunea cu securitatea și   infrastructura criptografică. Versiunile anterioare ale bibliotecii sunt   părți ale Visual Studio 2002, Visual Studio 2003 și Visual Studio   2005. Proiectul a pornit de la versiunea bibliotecii lansată ca parte a programului Visual Studio 2005 SP1.

0
adăugat

Aș sublinia recomandarea pentru PCRE . Am folosit-o în proiectele C ++ în Windows și funcționează excelent. Este gratuit, chiar și pentru construirea de software comercial. De asemenea, implementează un limbaj de expresie regulat de facto, care va fi binevenit utilizatorilor dvs. PCRE este, desigur, compatibilă cu Perl, iar Python folosește aceeași bibliotecă.

Interfața PCRE nativă este un pic ciudat și foarte stil C, deci probabil merită să scrieți un înveliș C ++ frumos în jurul acestuia. Există foarte probabil că există deja unul acolo, dar nu sunt familiarizat cu nici unul.

0
adăugat

C ++ 11 include acum suportul expresiilor regulate. Acesta va fi independent de platformă. Ai nevoie de un compilator recent. Verificați următoarea listă pentru a afla care dintre acestea să fie utilizat.

http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport

Sper ca ajuta

0
adăugat

Qt has also a nice Regular Expression implementation QRegExp. It is also platform independent.

0
adăugat