正则表达式 POSIX 字符类C++问题

Trouble with C++ Regex POSIX character class

本文关键字:C++ 问题 字符 POSIX 正则表达式      更新时间:2023-10-16

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

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 或这台电脑上的标准版本有关

的东西不起作用。

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