`
dewei
  • 浏览: 164433 次
  • 性别: 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)测试函数集是一个重要的标准,它由每年的国际进化计算竞赛举办者发布,用于评估和比较各种优化...

    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是微软为开发者提供的一个平台,通过它,程序员...

    C# Csharp 调用 C++的DLL中的回调函数

    本示例探讨的是如何在C#(Csharp)中调用C++动态链接库(DLL)中的回调函数。这涉及到C++导出函数、C# P/Invoke技术以及C#委托的理解和应用。 首先,我们需要理解C++的DLL工作原理。DLL是一种可重用的代码库,它...

    雷达模糊函数matlab代码

    计算特定雷达发射信号模糊函数的matlab代码

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

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

    查看c++ dll内部函数

    通过打开这个程序并加载要分析的DLL,可以显示函数调用图,看到每个函数的输入输出参数,以及它们在代码中的位置。 4. **depends22_x64**:这可能是Depends的一个特定版本或者针对64位系统的版本,因为"22"可能表示...

    ARM NEON 内建函数中文手册

    ARM NEON 查找手册,可以查找neon内建函数的功能以及入参和返回值类型; RVCT 提供在 ARM 和 Thumb 状态下为 Cortex-A8 处理器生成 NEON 代码的内在 函数。 NEON 内在函数在头文件 arm_neon.h 中定义。头文件既...

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

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

    Windows下生成函数关系调用图

    对于C/C++项目,函数关系图有助于揭示静态链接库和动态链接库中的函数交互,这对于理解和优化系统级代码至关重要。对于Java项目,它可以帮助开发者理解类与类之间的方法调用,对于理解和改进面向对象设计有极大的...

    JS-HTML-Format(JS及HTML代码格式化工具集合)

    在编程世界中,保持代码整洁和格式化是至关重要的,这不仅有利于代码的可读性,也有助于团队协作和代码维护。针对JS(JavaScript)和HTML(超文本标记语言)这两种广泛使用的前端开发语言,有多种代码格式化工具可以...

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

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

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

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

    C++“超级玛丽”游戏的源代码

    在本资源中,我们主要关注的是使用C++编程语言实现的“超级玛丽”游戏的源代码。C++是一种强大的、面向对象的编程语言,广泛应用于系统软件、游戏开发、应用程序和嵌入式系统等。通过分析这个项目,我们可以学习到...

    dft函数matlab代码

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

    不完全伽马函数的计算

    同时,为了提高效率,可以预计算一些常见p值的伽马函数结果,并存储在查找表中。此外,利用复数分析中的解析延拓,还可以处理非实数输入。 文件名为"Gamma_Incomplete"的压缩包可能包含实现不完全伽马函数的源代码...

    OPENCV函数手册(中文).zip

    这个压缩包“OPENCV函数手册(中文).zip”显然是为中文用户提供的OpenCV函数参考手册,帮助开发者更好地理解和使用OpenCV中的各种函数。 OpenCV库的核心功能主要分为以下几个方面: 1. 图像处理:包括读取、写入...

    在simulink中应用s函数的一个简单实例

    S函数,全称为System Function,是Simulink中用于构建自定义模块的核心元素,它可以让我们用C、C++或者MATLAB代码来定义模型的数学行为。在本实例中,我们将探讨如何在Simulink中应用S函数来设计一个简单的连续系统...

Global site tag (gtag.js) - Google Analytics