这是一个提升正则表达式的错误吗?

0 c++ regex boost

我想匹配任何字符,如az,AZ,0-9和 - ,所以我写了这个:

#include "thirdparty/boost/regex.hpp"
#include <iostream>


using namespace std;

int main(){
    string reg = "[a-z-A-Z0-9]";
    boost::regex expression(reg);
    cout<<"OK"<<endl;
}
Run Code Online (Sandbox Code Playgroud)

在运行时,程序核心转储并说:

在抛出'boost :: exception_detail :: clone_impl>'的实例后终止调用what():字符类中的无效范围结束解析正则表达式时发生错误:'[az - >>> HERE >>> A-Z0 -9]".

谁能告诉我为什么?

hwn*_*wnd 5

原因是-你的角色类中第一个范围之后的连字符().在字符类中,连字符具有特殊含义.您可以将连字符作为类的第一个或最后一个字符.

[-a-zA-Z0-9]
[a-zA-Z0-9-]
Run Code Online (Sandbox Code Playgroud)

在某些正则表达式实现中,您也可以直接放在范围之后.

如果您将连字符放在任何其他位置,您需要将其转义为将其添加到您的班级.

实际正则表达式实现:

[a-z\-A-Z0-9]
Run Code Online (Sandbox Code Playgroud)

作为字符串文字:

string reg = "[a-z\\-A-Z0-9]";
Run Code Online (Sandbox Code Playgroud)