Проблема с C ++ Regex Класс символов POSIX

Я пытаюсь создать регулярное выражение, которое может анализировать что-то вроде этого:

002561-1415179671591i.jpg

Вторая часть – timestamp unix (до i), и мне нужно ее извлечь. Я придумал следующий синтаксис, но std :: regex продолжает бросать regex_error, прежде чем я даже проверю соответствие, и я не уверен, что случилось.

Вот что у меня есть до сих пор: ([:d:])*-[[:d:]]*([:alpha:])\.jpg

Строка кода C ++, которая выдает ошибку, является конструктором для регулярного выражения

 std::regex reg(regex_expr); 

где regex_expr – это строка, которая была прочитана из файла.

Поистине оцените любую помощь, которую вы можете дать.

Редактировать: я написал раздел catch try, и кажется, что я получаю следующий код ошибки

std::regex_constants::error_brack

Редактировать 2: Хорошо … кажется, я все еще получаю ошибку даже с вырезанным тестом:

([:alpha:])*

Редактировать 3:

Кажется, я не могу заставить какое-либо выражение работать. Вот немного больше информации. Я использую clang ++ 3.5.0 на Kubuntu 14.04.

Не уверен, что [:d:] может стоять за [:digit:] . [EDIT] (Кажется, это возможно)

Когда вы используете class символов POSIX, он должен быть заключен в такой class символов:

 [[:digit:]] 

(Этот синтаксис позволяет составлять другие classы [[:digit:]ab] )

так:

 std::string regex_expr = "([[:digit:]]*)-([[:digit:]]*)([[:alpha:]])\\.jpg"; 

или если вы используете базовый режим:

 std::string regex_expr = "\\([[:digit:]]*\\)-\\([[:digit:]]*\\)\\([[:alpha:]]\\)\\.jpg"; 

Я предпочитаю использовать perl-совместимый синтаксис вместо classов символов:

 \d+-(\d+)[az]*\.jpg 

После многих тестов, по какой-то причине, я не мог заставить это работать. В любом случае, я попытался запустить boost :: regex, и это сработало сразу, поэтому я предполагаю, что что-то делать с clang, или версия стандарта на этом компьютере просто не работает.

Так что просто поставили, попробовали, и он сразу сработал. Не так много ответа, но я думаю, что так иногда бывает.