c++ Boost 对INI文件处理操作

本文介绍了如何使用Boost库中的Boost.Regex进行字符串分割及正则表达式匹配,包括使用regex_token_iterator进行字符串分割,以及使用regex_iterator列举匹配项,并通过regex_search进行部分数据匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

要使用Boost.Regex, 你需要包含头文件"boost/regex.hpp". Regex是本书中两个需要独立编译的库之一(另一个是Boost.Signals)。你会很高兴获知如果你已经构建了Boost— —那只需在命令提示符下打一行命令——就可以自动链接了(对于Windows下的编译器),所以你不需要为指出那些库文件要用而费心。

1:对文件regex_token_iterator 分割字符串

迭代器适配器,就是 boost::regex_token_iterator. 它与 regex_iterator 很类似,但却是用于列举不匹配某个正则表达式的每一个字符序列,这对于分割字符串很有用。

boost::regex reg(",");
	ifstream ifile("data.ini");
	vector<string> vec;
	string s;
	while (!ifile.eof())
	{   
		ifile>>s;  //读取一个整数
		//cout<< s <<endl;
		//vec.push_back(s);  //插入到 vector
		cin.get();
	}

	boost::sregex_token_iterator it(s.begin(),s.end(),reg,-1);  
	boost::sregex_token_iterator end; 
	while (it!=end)     
   vec.push_back(*it++);


使用 regex_iterator. 这个迭代器类型用一个序列来列举正则表达式的所有匹配。

//////regex_iterator

	    /*boost::regex reg("(\\d+),?");
	    std::string s="1,2,3,4,5,6";
        std::vector<std::string> vec;
        boost::sregex_iterator it(s.begin(),s.end(),reg);
	    boost::sregex_iterator end;

	    while (it!=end)
	     {
	    	 //vec.push_back(*it++);
	    	 //std::cout << *it++ << ' ';

	    	 string m = it->str();
	    	 //int m = lexical_cast<int>(it->str());
             //std::cout << m << ' ';
              vec.push_back(m);

              ++it;
             //ui.textEdit->append(QString::number(m));
	    	//for ( int ix = 0; ix < vec.size(); ++ix )
	    		  // std::cout << vec[ ix ] << ' ';

	    	
	     }*/


另一个Boost.Regex算法, regex_search. 与 regex_match 不同的是,regex_search 不要求整个输入数据完全匹配,则仅要求部分数据可以匹配。

调用regex_search时引用这些子表达式,这样我们就可以判断是哪一个选择被匹配了。我们使用regex_search的一个重载,它接受一个match_results类型的参数。当 regex_search 执行匹配时,它通过一个match_results类型的对象报告匹配的子表达式。类模板 match_results 使用一个输入序列所用的迭代器类型来参数化。

 char *buf = "This is boost::regex example";
      boost::regex exampleregex( "boost::regex" );

      boost::cmatch what;

	 while ( boost::regex_search(buf, what, exampleregex))
	 {
		  //std::string data = what.str();
	      //data = what.str();
		 for (size_t i = 0; i < what.size(); ++i)
		 {
			 if (what[i].matched)
			 std::cout << what[i] << std::endl;
			
		 }
		 std::cout << what.size() << std::endl;

	 }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值