boost::regext正则表达式异常分析
Posted 小猪童鞋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了boost::regext正则表达式异常分析相关的知识,希望对你有一定的参考价值。
https://stackoverflow.com/questions/6770898/unknown-escape-sequence-error-in-go
例如以上链接中的错误
#include <iostream> #include <boost/regex.hpp> #include <string> using namespace std; int main() { std::string regstr = "[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+"; boost::regex expression(regstr); std::string str = "192.168.0.3熟悉这个文图 192.168.1.1以上"; boost::smatch what; std::string::const_iterator begin = str.begin(); std::string::const_iterator end = str.end(); while (boost::regex_search(begin, end, what, expression)) { std::string msg = what[0]; std::cout<< "start:" << what[0].first - str.begin() << "\\tend:" << what[0].second - str.begin() << std::endl; std::cout << "0 :" << msg.c_str() << std::endl; begin = what[0].second; } return 0; }
编译
g++ -std=c++14 -Wall -O3 -finline-functions -lboost_regex -o main main.cpp && ./main
报错:
unknown escape sequence: .
原因:
字符串string里“\\{”表示{
但是boost::regex中,需要“\\\\{”。 第一个"\\"表示提取后面的“\\{”串。第二个才是表意。
因此
std::string regstr = "[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+";
需要改成
std::string regstr = "[0-9]+\\\\.[0-9]+\\\\.[0-9]+\\\\.[0-9]+";
详细解释见最上面链接,或者下方截图。
以上是关于boost::regext正则表达式异常分析的主要内容,如果未能解决你的问题,请参考以下文章