Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[regex] Klasy znakowe nie działają?

Ostatnio zmodyfikowano 2013-12-22 17:43
Autor Wiadomość
kubawal
Temat założony przez niniejszego użytkownika
[regex] Klasy znakowe nie działają?
» 2013-12-21 18:41:53
Witam!

Piszę sobie parser i używam wiele wyrażeń regularnych, ale po uruchomieniu, nawet najprostsze wyrażenia wywalają wyjątek regex_error

Po 10 minutach debugowania doszłem do wniosku, że nawet najprostszy wzorzec z klasą znakową, np.
regex r( "\\w" )
 wywala ten wyjątek.
Co dziwne, wzorce typu "(.+)" działają bez najmniejszego problemu.

Oto jeden z fragmentów kodu wykorzystujących regex'y:
C/C++
#include <regex>
using namespace std;

//...

regex reg( "(\\w+) (\\w+): (.+)" );

//...
P-99758
pekfos
» 2013-12-21 21:03:11
P-99768
Monika90
» 2013-12-21 23:50:51
Pewenie używasz GCC z wersją biblioteki standardowej, która jeszcze nie implementuje regex. Będziesz musiał poczekać na GCC 4.9, no chyba, że da się nową wersję biblioteki std zainstalować osobno.
P-99776
MrPoxipol
» 2013-12-22 12:22:44
@up
Co dziwne, wzorce typu "(.+)" działają bez najmniejszego problemu.
Ktoś tu czyta co 2 zdanie ;>

@down
Dobrze wiedzieć ;) Ale z tego co kojarzę, autor tematu używa kompilatora obsługującego regexpy ;p
P-99798
Elaine
» 2013-12-22 13:12:40
Piszę sobie parser i używam wiele wyrażeń regularnych
Tu leży prawdziwy problem :P

@up
Co dziwne, wzorce typu "(.+)" działają bez najmniejszego problemu.
Ktoś tu czyta co 2 zdanie ;>
Nie, "(.+)" zadziała nawet w szczątkowym <regex> z libstdc++ < 4.9, dopiero bardziej skomplikowane wyrażenia rzucą wyjątek.
P-99802
kubawal
Temat założony przez niniejszego użytkownika
» 2013-12-22 13:29:39

C++11 <regex> support [2013-10-03]
Regular expression support in libstdc++-v3 is now available.
@up, masz rację.

Czyli muszę zaktualizować MinGW?
A nie da się tylko zaktualizować libstdc++ do v3?
P-99812
kubawal
Temat założony przez niniejszego użytkownika
» 2013-12-22 14:54:13
Chyba sobie po prostu doinstaluję boost::regex, tak będzie najprościej.
P-99821
Elaine
» 2013-12-22 17:43:02
Najlepszym rozwiązaniem jest nieużywanie wyrażeń regularnych. Jeśli koniecznie musisz, wtedy Boost.Regex jest dobrym rozwiązaniem – w przeciwieństwie do biblioteki standardowej można tą bibliotekę przekonać do porządnego traktowania Unikodu.
P-99857
« 1 »
  Strona 1 z 1