正则表达式 POSIX 字符类C++问题
Trouble with C++ Regex POSIX character class
我正在尝试创建一个能够分析以下内容的正则表达式:
002561-1415179671591i.jpg
第二部分是 unix 时间戳(在 i 之前),我需要提取它。我想出了以下语法,但是 std::regex 在我检查匹配项之前一直抛出regex_error,我不太确定出了什么问题。
以下是我到目前为止得到的: ([:d:])*-[[:d:]]*([:alpha:]).jpg
引发错误的C++代码行是正则表达式的构造函数
std::regex reg(regex_expr);
其中regex_expr
是从文件中读入的字符串。
非常感谢你能提供的任何帮助。
编辑:我写了一个尝试捕获部分,似乎我收到以下错误代码
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";
我宁愿使用与perl兼容的语法而不是字符类:
d+-(d+)[a-z]*.jpg
经过多次测试,无论出于何种原因,我都无法让它工作。无论如何,由于我都有提升,我尝试了 boost::regex,它立即起作用,所以我认为与 clang 或这台电脑上的标准版本有关
的东西不起作用。所以简单地说,尝试了提升,它立即起作用了。答案不多,但我想有时事情就是这样。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题