`
dewei
  • 浏览: 164661 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

查找HTML代码“超级链接”中含有域名的函数

 
阅读更多

需求:在一段HTML里寻找超级链接中(正文文本)域名。

 

例如HTML内容如下:

<div id="bdfs0" class="EC_im EC_fr EC_PP  EC_idea1017 "><a id="dfs0" class="EC_t EC_BL" onmousedown="return c({'fm':'im','title':this.innerHTML,'url':this.href,'p1':1})" href="http://www.baidu.com/baidu.php?url=zx6K00KyXs40Q86kRjYK5CXfuZ-Yhk3pujbXdk6f0Ex7QN3XNuAjwnSYSbeIYBOzZw2ezRQDFiGIKgR5iDXyeTCNEPl_Mr-LmZ3fzxORWyM-pF2xYZEQkz-2sFQ3htQuFy5nr9Y.0b_a7hQwfHjHKUQYI3LHRrgDk3q5iGyAp7BEI3ded7.U1Yk0ZDqknLw8UQBzVHiksKY5THPYUhz3_oRY_T0pyYqnW0k0ATqTZPbIj00IybqTv7VgLN-gvPEUAqz0ZKGujYkrfKWpyfqPHR0UgfqnH0kPsKopHYs0ZFY5iYk0ANGujY1PHTsg1cLP1IxnHf1P7tzrH6sg1ndPjm0mhbqnHmk0AdW5Hn3n10YPHDv0Z7spyfqn0Kkmv-b5H00ThIYmyTqn0KEIhsq0A7B5HKxn0K-ThTqn0KsTjYs0A4vTjYsQW0snj0snj0s0AdYTjYs0ZFJ5H00uANv5gKW0ZwdT1YkPj6YPHcsnWnsPHcznjTvPWRsrfKBUjYs0APzm1Y1PjT3rf" target="_blank"><font color=#CC0000>耐压测试仪</font>-上海精密仪器仪..</a><br><a class="EC_BL EC_desc" href="http://www.baidu.com/baidu.php?url=zx6K00KyXs40Q86kRjYK5CXfuZ-Yhk3pujbXdk6f0Ex7QN3XNuAjwnSYSbeIYBOzZw2ezRQDFiGIKgR5iDXyeTCNEPl_Mr-LmZ3fzxORWyM-pF2xYZEQkz-2sFQ3htQuFy5nr9Y.0b_a7hQwfHjHKUQYI3LHRrgDk3q5iGyAp7BEI3ded7.U1Yk0ZDqknLw8UQBzVHiksKY5THPYUhz3_oRY_T0pyYqnW0k0ATqTZPbIj00IybqTv7VgLN-gvPEUAqz0ZKGujYkrfKWpyfqPHR0UgfqnH0kPsKopHYs0ZFY5iYk0ANGujY1PHTsg1cLP1IxnHf1P7tzrH6sg1ndPjm0mhbqnHmk0AdW5Hn3n10YPHDv0Z7spyfqn0Kkmv-b5H00ThIYmyTqn0KEIhsq0A7B5HKxn0K-ThTqn0KsTjYs0A4vTjYsQW0snj0snj0s0AdYTjYs0ZFJ5H00uANv5gKW0ZwdT1YkPj6YPHcsnWnsPHcznjTvPWRsrfKBUjYs0APzm1Y1PjT3rf" target="_blank" id="bdfs0" onmousedown="return c({'fm':'im','title':this.innerHTML,'url':this.href,'p1':1,'rsv_ct':'d'})"><font size="-1" >咨询热线:021-65730171.接地电阻<font color=#CC0000>测试仪</font>/接地电阻表,绝缘电阻<font color=#CC0000>测试仪</font>/绝缘电阻表,</font><br><font size="-1" class="EC_url">www.canytec.com.cn</font></a><span class="icons EC_PP"><a style="cursor:pointer;text-decoration:none;" href="http://trust.baidu.com/vcard/?id=ef6b817356c74744c2c8142179f321ba97010019&url=zx6K00KyXs40Q86kRjYK5CXfuZ-Yhk3pujbXdk6f0Ex7QN3XNuAjwnSYSbeIYBOzZw2ezRQDFiGIKgR5iDXyeTCNEPl_Mr-LmZ3fzxORWyM-pF2xYZEQkz-2sFQ3htQuFy5nr9Y.7b_a7hQwfHjHKUQYI3LHRrgDk3q5iGyAp7BEI3ded0.U1Yk0ZDqknLw8UQBzVHiksKY5THPYUhz3_oRY_T0pyYqnW0k0ATqTZPbIj00IybqTv7VgLN-gvPEUAqz0ZKGujYkrfKWpyfqPHR0UgfqnH0kPsKopHYs0ZFY5iYk0ANGujY1PHTsg1cLP1IxnHf1P7tzrH6sg1ndPjm0mhbqnHmk0AdW5Hn3n10YPHDv0Z7spyfqn0Kkmv-b5H00ThIYmyTqn0KEIhsq0A7B5HKxn0K-ThTqn0KsTjYs0A4vTjYsQW0snj0snj0s0AdYTjYs0ZFJ5H00uANv5gKW0ZwdT1YkPj6YPHcsnWnsPHcznjTvPWRsrfKBUjYs0APzm1Y1PjT3rf&dataTime=51" target="_blank" onmousedown="return c({'title':this.innerHTML,'url':this.href,'fm':'im','rsvMt':'1017','p1':'1'});" class="c-icon icon-certify c-icon-v efc-cert" data-renzheng="{title: '上海精密仪器仪表有限公司:',favorite: {fm: 'im',rsvMt: '',p1: '1',url: 'http://i.baidu.com/myfavorite/set?'},appraise: {fm: 'im',rsvMt: '',p1: '1',url: 'http://trust.baidu.com/womc/comt/?'},report: {fm: 'im',rsvMt: '',p1: '1',url: 'http://baozhang.baidu.com/guarantee/accu/?'},identity: {a: {fm: 'im',rsvMt: '1017',p1:'1',url: 'http://trust.baidu.com/vcard/?id=ef6b817356c74744c2c8142179f321ba97010019&dataTime=51'}, img: '',text: '',credit: '5'}}" data-tip-limite="true" data-tooltips="bc"></a>
</span></div>

 

C++函数:

 

/*
 功能:查找一段HTML代码中超级链接<a><font>xxx.com</font></a>第一个出现的域名【例:xxx.com等】
      By Dewei 2013-10-22
 用法:
 #include <boost/regex.hpp>
 std::string str_out;
 find_first_domain(".....", &str_out);
 参数:原始HTML代码,输出找到的域名
 返回:找到返回true,否则返回false
 */
bool find_first_domain(const std::string &str_src, std::string &str_out)
{
	boost::regex expression("<a(.*?)href=\"([^\n\t\f\r \"]+?)\"([^>]*?)>(.*?)</a>",  boost::regex::icase|boost::regex::perl);
	boost::smatch what_match;
	std::string::const_iterator const_iter = str_src.begin();
	std::string::const_iterator const_iter_end = str_src.end();
	str_out.clear();
	while(boost::regex_search(const_iter, const_iter_end, what_match, expression))
	{

		std::string str_all(what_match[0].first, what_match[0].second);
		std::string str_fordomain(what_match[4].first, what_match[4].second);
		//找到匹配的<a>xxxx</a>
		if (!str_fordomain.empty()) {
			boost::cmatch what_match;
			std::string hostname = "(?:[a-z0-9](?:[-a-z0-9]*[a-z0-9])?\\.)+(?:com|net|edu|biz|gov|asia|org|in(?:t|fo)|(?-i:[a-z][a-z]))"; 
			boost::regex expression(hostname,  boost::regex::icase|boost::regex::perl);
			if (boost::regex_search(str_fordomain.c_str(), what_match, expression)) {
				str_out.assign(what_match[0].first, what_match[0].second);
				return true;
			}
		}
		const_iter = what_match[0].second;
	}
	return false;
}

 

分享到:
评论

相关推荐

    2017CEC测试函数与matlab代码

    《2017CEC测试函数与MATLAB代码解析》 在优化算法的研究与应用领域,CEC(Competition on Evolutionary Computation)测试函数集是一个重要的标准,它由每年的国际进化计算竞赛举办者发布,用于评估和比较各种优化...

    三角函数的Verilog代码实现

    在硬件描述语言(HDL)如Verilog中实现三角函数,可以提高计算速度并优化资源利用,尤其是在FPGA或ASIC设计中。本文将深入探讨如何用Verilog代码实现三角函数,特别是正弦函数(sin)和余弦函数(cos)。 1. **基础...

    LFM信号模糊函数Matlab代码

    LFM信号模糊函数Matlab代码,直接运行可用,参数可自行更改

    在Go代码中查找未使用的函数参数和结果-Golang开发

    unparam go get -u github.com/mvdan/unparam报告代码中未使用的函数参数。 为了最大程度地减少误报,它会忽略以下内容:未命名和下划线参数其签名与可达的函数类型unparam相匹配的funcs go -u github....

    精通windowsAPI函数接口编程实例源代码

    《精通Windows API函数接口编程实例源代码》是一个深入学习Windows API编程的重要资源,它涵盖了大量实践案例,旨在帮助开发者熟练掌握API接口的使用技巧。Windows API是微软为开发者提供的一个平台,通过它,程序员...

    运动控制卡API接口函数编程源代码

    3. **动态/静态链接**:根据API库的性质,可能需要动态链接(在运行时加载库)或静态链接(在编译时将库代码合并到可执行文件中)。 4. **初始化**:在使用API之前,通常需要进行初始化操作,比如打开设备、设置通信...

    使用Hash散列从海量IP地址中查找IP地址

    同时,描述中也强调了“完美的展示了hash在查询中的使用方法”,这表明源代码文件(如haship.c和randip.c)可能包含具体的哈希函数实现,以及如何在实际问题中应用这些函数。 标签“hash 散列 海量IP地址 查询”...

    Keil C51 中C语言编程下函数绝对地址的定位方法

    在Keil C51开发环境中,对于特定的嵌入式应用,有时我们需要将函数的代码定位到ROM的特定地址,以便实现对硬件的精确控制或优化内存布局。本篇文章将详细解释如何在Keil C51中实现函数的绝对地址定位。 首先,我们...

    超级玛丽c语言源代码

    【超级玛丽C语言源代码】是一份珍贵的学习资源,它揭示了如何用C语言实现经典游戏《超级玛丽》的核心逻辑和功能。对于想深入理解游戏编程、C语言应用或者想要自己动手开发类似游戏的程序员来说,这是一个绝佳的参考...

    给FastReport增加一个自定义函数

    1. **创建函数源代码**:首先,你需要编写一个包含自定义函数的Pascal源代码文件,例如`Frfun2.dpk`和`Frfuns3d.pas`中的内容。这个源代码将实现函数的具体逻辑。比如,`Frfuns3d.pas`可能包含了一个三维图表处理的...

    erf()函数C语言代码

    该源代码采用C语言实现了误差函数erf(),其精度可根据参数ERF_N来调节(默认100),并且由于使用单次循环同时累加和累乘,因而避免了调用pow()函数,使得算法速度更快。该实现采用的是麦克劳林展开方法再逐项求积分...

    高斯卷积模板(高斯函数)Matlab代码

    高斯卷积模板(高斯函数)Matlab代码,可实现二维高斯卷积模板的生成功能。M文件,可用记事本打开。

    语音端点检测matlab程序含enframe函数

    在提供的压缩包文件中,很可能包含了实现上述步骤的MATLAB代码,包括enframe函数的使用示例。通过学习和理解这些代码,你可以更深入地了解语音端点检测的原理和实践方法。同时,也可以根据实际需求调整参数,优化...

    使用 VC/VS++ 调用微软蓝牙 API 函数的示例代码

    在本文中,我们将深入探讨如何使用Visual C++(VC++)和Visual Studio++(VS++)调用微软的蓝牙API函数。这些API函数允许开发者直接与蓝牙设备进行通信,实现各种无线连接功能。我们将主要关注如何在不同版本的VC++...

    三角函数查表方式c语言实现

    4. **代码实现**:在C语言中,可以定义一个函数,接受角度作为输入,然后返回相应的三角函数值。这个函数首先将角度转换为弧度,接着找到最接近的两个表项,最后执行线性插值计算。 5. **性能优化**:为了进一步...

    VC++ DLL 实现回调函数的实例

    在VC++编程中,DLL(动态链接库)是一种非常重要的技术,它允许多个程序共享同一段代码和数据,从而节省内存资源并简化软件开发。回调函数则是编程中一种常见的设计模式,它允许函数将控制权返回给调用者,使得调用...

    DLL函数查看工具

    标题中的“DLL函数查看工具”指的是一个专门用来查看动态链接库(DLL)文件中包含的函数的软件。DLL是Windows操作系统中的一种共享库机制,它允许多个程序共享同一段代码和数据,从而节省内存资源并方便软件开发。...

    Matlab中峰值计算函数findpeaks()的c++源码导出(附.m源码、导出步骤说明及导出的c++源码)

    寻找峰值算法应用广泛,matlab...压缩包中包含matlab中的findpeaks()函数的所有输入参数说明、.m源码、详细导出步骤以及导出的c++源码。 注:findpeaks()函数只支持查找波峰,如果需要查找波谷,请先取反再调用该函数。

    dft函数matlab代码

    用matlab编写的dft函数代码。。。。。。。。。

Global site tag (gtag.js) - Google Analytics