我想匹配任何字符,如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]".
谁能告诉我为什么?
原因是-你的角色类中第一个范围之后的连字符().在字符类中,连字符具有特殊含义.您可以将连字符作为类的第一个或最后一个字符.
[-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)