C ++ Regex POSIX字符类的问题

时间:2014-12-03 21:22:54

标签: c++ regex clang++

我试图创建一个能够分析这样的东西的正则表达式:

  

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。

3 个答案:

答案 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上的标准版本有关的东西都没有用。

所以简单地说,尝试提升,它立即起作用。答案不是很多,但我想有时会发生这样的事情。