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

时间:2014-08-25 02:30:20

标签: c++ regex boost

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

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

在抛出&#39; boost :: exception_detail :: clone_impl&gt;&#39;的实例后终止调用   what():字符类中的无效范围结束解析正则表达式时发生错误:&#39; [az-&gt;&gt;&gt; HERE&gt;&gt;&gt; A-Z0-9]&#39;。< / p> 谁能告诉我为什么?

1 个答案:

答案 0 :(得分:5)

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

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

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

如果您将连字符放在任何其他位置,您需要将其转义为您的类。

实际正则表达式实现:

[a-z\-A-Z0-9]

作为字符串文字:

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