2009-09-14 9 views
15

Czy to? Jeśli tak, to gdzie mogę uzyskać dokumentację ... jeśli nie, to jaka byłaby najlepsza alternatywa?Czy C lub C++ ma standardową bibliotekę regex?

+0

Niemal duplikaty: http://stackoverflow.com/questions/181624, http://stackoverflow.com/questions/923500 i 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: można było szybciej uzyskać bogactwo informacji i łatwiej, wyszukując: http://stackoverflow.com/search?q=c+c%2B%2B+regex+standard – dmckee

Odpowiedz

31

C++ 11 teraz wreszcie ma standard regex library - std :: regex. Jeśli nie masz dostępu do implementacji C++ 11, dobrym rozwiązaniem może być Nie jest to w pełni równoważne std :: regex (np. the "empty()" method is not in the std::regex), ale jest to bardzo dojrzała implementacja regex dla C++.

+0

Ta odpowiedź jest datowana, od 2012 odpowiedź brzmi teraz Tak, C++ ma standardową bibliotekę regex, wymagane przez C++ 11, pod nagłówkiem "regex" –

+0

@Clairvoire - Postanowiłem edytować/zaktualizować moją odpowiedź na zmiany od końca 2009 roku, dzięki za heads-up w tej przestarzałej odpowiedzi. –

+0

Różnica polega również na tym, że standard C++ nie obsługuje nazwanych podgrup, czyli nazywania części wyrażeń regularnych, aby później można było uzyskać je po nazwie. – user3111311

5

Sprawdź bibliotekę boost regex. Powinien stać się częścią standardu z C++ 0x.

3

Jeśli przez standard masz na myśli w zestawie z kompilatorem, to nie. Ale większość innych języków, które pakują rozszerzenie regex, używa całkiem standardowych implementacji c. Na przykład. PCRE - Perl Compatible Regular Expression i biblioteki C mają obsługę regex POSIX (patrz man page).

6

Pakiet Microsoft Visual C++ 2008 Feature Pack 1 (obecnie włączony do Visual Studio 2008 Service Pack 1) zawiera implementację "oficjalnych" typów reg TR1. Powal się :-)

1

Qt z Trolltech, ma również realizację regex, które uważam za bardzo łatwy w użyciu. Jednakże, jeśli nie planujesz używać Qt do niczego innego, użyłbym Boost.Regex, ponieważ prawdopodobnie byłbyś dobry używając Boost również do innych celów.

1

Standardowy język programowania ISO/IEC 14882: 2011 C++ opisuje klasę regex jako część biblioteki C++, która jest pod silnym wpływem dojrzałej biblioteki Boost.

Co ciekawe, od stycznia 2013 r. Zgodność kompilatorów z tym standardem jest wciąż nierówna, np. popularny kompilator C++ pakietu GNU nie obsługuje/nie spełnia tej części standardu.

Z tego powodu najlepiej jest używać Boost w tym momencie, dopóki obsługa kompilatora nie osiągnie zgodności.