[regex] Klasy znakowe nie działają?
Ostatnio zmodyfikowano 2013-12-22 17:43
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: #include <regex> using namespace std;
regex reg( "(\\w+) (\\w+): (.+)" );
|
|
pekfos |
» 2013-12-21 21:03:11 |
|
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. |
|
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 |
|
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. |
|
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? |
|
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. |
|
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. |
|
« 1 » |