我想匹配像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> 谁能告诉我为什么?
答案 0 :(得分:5)
原因是你的角色类中第一个范围之后的连字符(-
)。在字符类中,连字符具有特殊含义。您可以将连字符作为类的第一个或最后一个字符。
[-a-zA-Z0-9]
[a-zA-Z0-9-]
在某些正则表达式实现中,您也可以直接放在范围之后。
如果您将连字符放在任何其他位置,您需要将其转义为您的类。
实际正则表达式实现:
[a-z\-A-Z0-9]
作为字符串文字:
string reg = "[a-z\\-A-Z0-9]";