C++ C+的问题+;正则表达式POSIX字符类

C++ C+的问题+;正则表达式POSIX字符类,c++,regex,clang++,C++,Regex,Clang++,我正在尝试创建一个能够分析如下内容的正则表达式: 002561-1415179671591i.jpg 第二部分是unix时间戳(在i之前),我需要提取它。我提出了以下语法,但是std::regex在我检查匹配之前一直抛出一个regex_错误,我不太确定到底出了什么问题 以下是我到目前为止得到的信息:([:d:])*-[:d:]*([:alpha:])\.jpg 抛出错误的C++代码行是ReXEX < /P>的构造函数 std::regex reg(regex_expr); 其中,regex_e

我正在尝试创建一个能够分析如下内容的正则表达式:

002561-1415179671591i.jpg

第二部分是unix时间戳(在i之前),我需要提取它。我提出了以下语法,但是std::regex在我检查匹配之前一直抛出一个regex_错误,我不太确定到底出了什么问题

以下是我到目前为止得到的信息:
([:d:])*-[:d:]*([:alpha:])\.jpg

抛出错误的C++代码行是ReXEX < /P>的构造函数

std::regex reg(regex_expr);
其中,
regex_expr
是从文件中读入的字符串

非常感谢你能给予的任何帮助

编辑:我写了一个try-catch部分,似乎得到了以下错误代码

std::regex_常量::error_brack

编辑2:好的。。。似乎我仍然得到了错误,即使是一个削减测试:

([:alpha:])*

编辑3:


似乎我无法表达我的想法。这里有更多的信息。我正在Kubuntu 14.04上使用clang++3.5.0。

不确定
[:d:][/code>是否可以代表
[:digit:][/code>。[编辑](似乎有可能)

使用POSIX字符类时,必须将其封装在如下字符类中:

[[:digit:]]
(此语法允许组合其他类
[[:digit:]ab]

因此:

或者,如果您使用基本模式:

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

我宁愿使用与perl兼容的语法,而不是字符类:

\d+-(\d+)[a-z]*\.jpg

经过多次测试,无论出于什么原因,我都无法让它工作。因为我已经有了boost,我试用了boost::regex,它马上就可以工作了,所以我认为这台电脑上的标准版本或者是叮当声都不起作用


简单地说,尝试了boost,它马上就起作用了。答案不多,但我想有时候事情就是这样。

你想从你的模式字符串创建
std::regex
对象(“([:d:])*-[:d:][]*([:alpha:])\.jpg”),然后使用
regex\u match
(或任何东西)来查看该模式是否与某个字符串匹配。当我尝试这个方法时(我直接复制/粘贴了你的代码)我仍然得到了我的版本中的std::regex_constants::error_brack…我认为问题在于你的编译器版本,gcc在4.9版本之前不支持regex。这可能就是原因。不幸的是,我被卡住了,因为这段代码不仅适用于我,也适用于使用相同操作系统版本的其他人,因此被困在版本4.8。我想我得坚持下去。。。
\d+-(\d+)[a-z]*\.jpg