用正则表达式解析html格式用法备忘


 

 

 

  1. 起因

a)         工作中需要解析html ,由于现有的html解析代码过于老旧,不满足可读性,复用性,维护性三个编程要求。意味着,html解析模块一旦出了问题,修复时间长,人力耗费高。而对于系统,html解析的需求是长期存在的,需要有一套可复用,高效,模块化方法来解析。正则表达式解析正是这样一个尝试方向。

 

 

  1. 正则表达式解析举例

a)         删除特定标签:

 

 

删除<xxx>类型的标签:

 

#include "boost/regex.hpp"

string str_replace = "";

string instr = "<tag>content</tag>";

boost::regex reg_del( "<[^>]*>" );

string result = boost::regex_replace(instr, reg_del, str_replace, boost::match_default | boost::format_all);

 

 

result的值为 “content”

 

删除<style>xxx</style>:

 

#include "boost/regex.hpp"

string str_replace = "";

string instr = "<a><style>content</style><b>";

boost::regex reg_del2( "<style[^>]*>[^>]*</style>" );

string result = boost::regex_replace(instr, reg_del2, str_replace, boost::match_default | boost::format_all);

 

 

result的值为 “<a><b>”

 

#include "boost/regex.hpp"

std::string text("<a color=green>content1</a><b color=blue>content2</b>");

boost::regex regex("<[^>]*color[^>]*>");

boost::sregex_token_iterator iter(text.begin(), text.end(), regex, 0);

boost::sregex_token_iterator end;

for (; iter != end; ++iter)

{std::cout << *iter << '\n';}

 

 

程序输出为:

<a color=green>

<b color=blue>

 

 

 

  1. 使用正则表达式做解析优劣

a)         好处

                         i.              代码简洁短小, 减少维护压力。

b)         坏处

                         i.              正则表达式入门成本高

                       ii.              不懂正则的人读不懂,要靠注释说明。

 

 

 

 

  1. 正则表达式资料

a)         简单的入门其实不难,一些简单的网站介绍几本可以大概了解。

b)         正则用法广泛,不必追求全懂,知道可能会有写法,一边查资料, 一边测试效果更快。

c)         测试工具推荐使用 RegexBuddy, 用法简单, 网上也有blog教用。用此工具可以快速看到正则的效果是不是需要的(如下图)。

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM