Boost::regex练习实例

    #include <algorithm>
    #include <vector>
    #include <string>
    #include <iostream>
    #include <cassert>
    #include <boost/regex.hpp>
    using namespace std;
    using namespace boost;
    //写一个程序,提取<p></p>之间的内容
    int main()
    {

    //  regex reg("(<p.*>(.*)</p>)?");
        regex reg("<p.*?>(.*?)</p>");
        vector<string> vec;
        string s= "<p>i‘m here!</p> and of course <pasda>you‘re here too,ok?</p>";
        sregex_iterator it(s.begin(),s.end(),reg);
        sregex_iterator end;
        while (it!=end)
        {
            vec.push_back((*it).str().c_str());
            it++;
        }
        copy(vec.begin(),vec.end(),ostream_iterator<string>(cout,"/n"));
        //在得到iterator或者子字符串后,再用regex_replace进行替换就行了。
        vector<string>   vec2;
        regex reg2("(<p.*?>)(.*?)(</p>)");
        for (vector<string>::iterator it3 = vec.begin();it3!=vec.end();it3++)
        {
            string s= *it3;
            s=regex_replace(s,reg2,"$2");
            vec2.push_back(s);
        }
        copy(vec2.begin(),vec2.end(),ostream_iterator<string>(cout,"/t"));
        return 0;
    }

直觉告诉我还可以写得更简洁一些,不过现在不够熟练,得慢慢琢磨了。

使用regex_iterator进行匹配,以及提取表达式,显得还不够熟练呢......正则表达式写错了,程序根本得不到想要的结果。

对于?的使用,应该有更进一步的认识了吧?

时间: 2024-10-13 22:05:42

Boost::regex练习实例的相关文章

#墙裂推荐Boost regex# C,C++11,Boost三种regex库性能比较

在最近的一个项目中,发现之前的正则匹配模块对于长字符串匹配性能损失比较厉害,因此对长字符串下的各种正则匹配进行了略微研究并附有实例.本文参考了博客http://www.cnblogs.com/pmars/archive/2012/10/24/2736831.html(下文称文1),这篇文章也是对三种regex库进行了比较,但有些地方我还有一些自己的见解,特此罗列如下,感谢这篇文章的作者. 1.C regex库 由于项目中一直用的都是C regex库,所以首先对C regex进行了研究.对于C r

boost::string or boost::regex

有时候写代码时会遇到下面问题 如果有一个文本文件,其包括内容类似于C语言,当中有一行例如以下格式的语句: layout (local_size_x = a,local_size_y = b, local_size_z = c) in; 当中用蓝色标记出的部分(layout, local_size_x, local_size_y, local_size_z, in)为keyword,斜体字部分(a, b, c)为数据类型为unsigned int的数字,请编写一个函数,用于从文件里抽取出a, b,

boost::regex

常见用法: boost::regex express; regex_match(str,express);  bool smatch what; cmatch what; typedef match_results<const char*> cmatch;typedef match_results<std::string::const_iterator> smatch; regex_search(str,what,express);bool what[0]; what[1]; re

c++ 使用boost regex库 总结

用java的时候觉得挺折腾,回头来弄c++才知道什么叫折腾...汗... 首先参考我写的这篇文章:http://www.cnblogs.com/qrlozte/p/4100892.html 我从sourceforge把整个boost的zip下载下来以后,我主要是在编译 boost regex的时候出问题了:boost有很多library,regex只是其中一个,怎么编译regex? 当然,第一步是查看文档,找到boost-path/doc/html/index.html打开,翻了半天倒找rege

#include &lt;boost/regex.hpp&gt;

boost C++的正则表达式库boost.regex可以应用正则表达式于C++.正则表达式大大减轻了搜索特定模式字符串的负担,在很多语言中都是强大的功能. boost.regex库中两个最重要的类是boost::regex和boost::smatch,它们都在boost/regex.hpp文件中定义.前者用于定义一个正则表达式,而后者可以保存搜索结果. 小结:C++的正则表达式库早已有之,但始终没有哪个库纳入到标准化流程中.目前该库已经顺利的成立新一代C++标准库中的一员,结束了C++没有标准

使用Boost Regex 的regex_search进行遍历搜索

在regex_search函数中,会将找到的第一个匹配结果保存到一个smatch类中. 然而如果搜索字符串中有多个匹配结果,则需要自己实现了. 在smatch中,有两个成员,官方文档如下: iterator first: An iterator denoting the position of the start of the match. iterator second An iterator denoting the position of the end of the match. 所以,

Boost::Regex代码示例

看一个别人给出的例子,当我们输入“select 字符串 from 字符串”的时候,会得到输出:如果不符合这个格式,就会输出error.注意:在命令行下输入的时候,按ctrl+Z.回车表示行输入结束. #include <cstdlib> #include <stdlib.h> #include <boost/regex.hpp> #include <string> #include <iostream> using namespace std;

vs 2005 使用 boost regex

第一步: Boost 入门及其VS2005下编译boost库 boost.regex库安装指南 Boost下载和Boost安装去哪下载Boost呢?英文http://www.boost.org ,中文http://boost.c-view.org,可以找到一个.zip或.tar.gz格式的压缩包.下载完毕后,解压到某个目录,比如boost_1_26_0,里面一般有这么几个子目录:boost.libs.more.people.status.tools,看看没问题就行了.如果Boost更新时您懒得去

boost regex expression

Boost.Regex provides three different functions to search for regular expressions 1. regex_match #include <boost/regex.hpp> #include <string> #include <iostream> int main() { std::string s = "Boost Libraries"; boost::regex expr(