这是boost regex的bug吗?

Is this a bug of boost regex?

本文关键字:bug boost regex 这是      更新时间:2023-10-16

我想匹配像a-z, a-z, 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;
}

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

抛出'boost::exception_detail::clone_impl>'实例后终止调用解析正则表达式时发生错误:'[a-z->>>HERE>>>A-Z0-9]'.

谁能告诉我为什么?

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

[-a-zA-Z0-9]
[a-zA-Z0-9-]

在一些正则表达式实现中,你也可以直接放在一个范围后面。

如果你把连字符放在其他地方,你需要转义它以便将它添加到你的类中。

实际正则表达式实现:

[a-z-A-Z0-9]

作为字符串字面值:

string reg = "[a-z\-A-Z0-9]";