c++ - C++ Regex POSIX 字符类的问题

标签 c++ regex clang++

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

002561-1415179671591i.jpg

第二部分是 unix 时间戳(在 i 之前),我需要提取它。我想出了以下语法,但 std::regex 在我检查匹配之前一直抛出 regex_error,我不太确定哪里出了问题。

这是我目前得到的:([:d:])*-[[:d:]]*([:alpha:])\.jpg

抛出错误的 C++ 代码行是正则表达式的构造函数

std::regex reg(regex_expr);

其中 regex_expr 是从文件中读入的字符串。

非常感谢您能提供的任何帮助。

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

std::regex_constants::error_brack

编辑 2:好吧......即使进行了缩减测试,我似乎仍然遇到错误:

([:alpha:])*

编辑 3:

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

最佳答案

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

当你使用 POSIX 字符类时,它必须包含在这样的字符类中:

[[:digit:]]

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

所以:

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

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

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

关于c++ - C++ Regex POSIX 字符类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27281897/

相关文章:

clang - clang 支持边界检查吗?

c++ - 除了文本文件之外,您能否将 C++ 桌面应用程序中的输入数据或其他类型的数据存储在文件中?

c++ - 为什么在/usr/include/c++/5/bits/fstream.tcc 中可以在没有返回类型的情况下运行

c# - 正则表达式,我需要改进一种从图像中获取 src 和 alt 的方法

python - 如何处理字符之间有空格的单词?

c++ - 为什么clang不能启用所有的 sanitizer ?

C++删除段错误

c++ - 模板函数中的参数类型可以推断吗?

ruby - 如何在 ruby​​ 中用转义单引号替换单引号

c++ - "padding class ' Tester' with 4 bytes"警告是什么意思?