我试图创建一个能够分析这样的东西的正则表达式:
002561-1415179671591i.jpg
第二部分是unix时间戳(在i之前),我需要提取它。我提出了以下语法,但是在我检查匹配之前std :: regex一直在抛出一个regex_error而且我不太确定是什么错误。
这是我到目前为止所得到的:([:d:])*-[[:d:]]*([:alpha:])\.jpg
抛出错误的C ++代码行是regex的构造函数
std::regex reg(regex_expr);
其中regex_expr
是从文件中读入的字符串。
非常感谢您能给予的任何帮助。
编辑:我写了一个try catch部分,似乎我收到了以下错误代码
std::regex_constants::error_brack
编辑2:好的...似乎即使进行了减少测试,我仍然会收到错误:
([:alpha:])*
编辑3:
似乎我无法让任何表达工作。这里有更多信息。我在Kubuntu 14.04上使用了clang ++ 3.5.0。
答案 0 :(得分:2)
不确定[:d:]
是否代表[:digit:]
。 [编辑](似乎有可能)
当您使用POSIX字符类时,它必须包含在类似的字符类中:
[[:digit:]]
(此语法允许组合其他类[[:digit:]ab]
)
这样:
std::string regex_expr = "([[:digit:]]*)-([[:digit:]]*)([[:alpha:]])\\.jpg";
或者如果您使用基本模式:
std::string regex_expr = "\\([[:digit:]]*\\)-\\([[:digit:]]*\\)\\([[:alpha:]]\\)\\.jpg";
答案 1 :(得分:0)
我宁愿使用perl兼容语法而不是字符类:
\d+-(\d+)[a-z]*\.jpg
答案 2 :(得分:0)
经过多次测试后,无论出于何种原因,我都无法解决这个问题。无论如何,我试过了boost :: regex并且它可以直接使用,所以我认为与任何一个clang或者这台PC上的标准版本有关的东西都没有用。
所以简单地说,尝试提升,它立即起作用。答案不是很多,但我想有时会发生这样的事情。