我正在尝试创建一个能够分析如下内容的正则表达式:
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/